نمایش نتایج 1 تا 6 از 6

نام تاپیک: آموزش استفاده از AutoMapper و رهایی از بند تکرار

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    آموزش استفاده از AutoMapper و رهایی از بند تکرار

    در محیط ASP.MVC کار با مدل یکی از ارکان اصلی برنامه نویسی است. در بسیاری موارد مدلی که در بانک استفاده کرده اید برای نمایش به کاربر در قسمت View مناسب نیست. معمولا مدلها شامل اطلاعات خاصی هستند که بهتر است کاربر آنها را مشاهده نکند. در این مواقع ما یک مدل میانجی میسازیم با عنوان ViewModel که جهت نمایش مدل در View از آن استفاده کنیم(البته با تعریف آن در MVVM فرق دارد)
    فرض کنید یک مدلی که برای کاربران سایت داریم به صورت زیر باشد.



    دانلود متن کامل مقاله به همراه پروژه ASP.MVC در VS2012





    public class User
    {

    public int ID { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Name { get; set; }
    public string Password { get; set; }

    public DateTime TimeCreated { get; set; }

    }


    حالا برای نمایش مشخصات یک کاربر قبل از ارسال مدل به View باید خصوصیت Password را برداریم. برای این منظور یک مدل دیگر میسازیم.

    public class UserView
    {

    public int ID { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Name { get; set; }

    }


    توجه : اگر اینکار نکنید و مدل را مستقیما به View بفرستید به راحتی با ابزار برنامه نویسی درون Chrome یا IE میشود محتویات کامل مدل ارسالی را مشاهده کرد و عدم نمایش یک خاصیت به صورت تگ HTML باعث محو شدن آن خصوصیت نمیشود. دیگر اینکه در اینجا ممکن است ساده تر این باشد که مقدار password را قبل از ارسال رو رشته ی خالی تنظیم کنیم. اما در بسیاری موارد مدلها خیلی شلوغتر از آن است که با خط خطی کردن کارمان پیش برود.

    کنترلر(بدون AutoMapper)

    در گام بعدی کنترلر مورد نظر خود را می سازیم و اطلاعات را از بانک بارگذاری می کنیم.
       public ActionResult Index()
    {

    var user = GetUserInfo(Id: 10);
    //--- TODO: Map User to UserView

    return View(userView);
    }



    اطلاعات هر کاربر با استفاده از متد GetUserInfo() خوانده میشود و درون متغیر user ذخیره میگردد. در اینجا با دو چالش روبرو هستیم.

    1. مدل User باید به مدل UserView تبدیل شود.
    2. وقتی اطلاعات از بانک SQL بازگردانده میشوند رشته ها نه به اندازه ی محتوایشان بلکه به اندازه ی طول
    پیشفرض مقدار دهی شده اند. مثلا اگر در بانک SQL طول فیلد Name را روی nchar(20) تنظیم کرده باشید. SQL همیشه رشته ای با طول 20 باز میگرداند. حتی اگر رشته ی ذخیره شده درون فیلد یک کلمه ی 5 یا 10 حرفی باشد.


    بدون استفاده از AutoMapper مراحل کار به صورت زیر است.


    public ActionResult Index()
    {

    var user = GetUserInfo(Id: 10);

    var userView = new UserView()
    {
    ID = user.ID,
    Name = user.Name.Trim(),
    FirstName = user.FirstName.Trim(),
    LastName = user.LastName.Trim()
    };


    return View(userView);
    }



    حالا برای یک لحظه تصور کنید که مدل User در ابعاد واقعی باشد که چیزی نزدیک به 20 فیلد لازم دارد. کپی تک تک خصوصایت و Trim کردن رشته ها (در بسیاری موارد الزامی است) یک کار سرسام آور است. حالا این کار را در تعداد همه ی View ها ضرب کنید و ببینید که با چه حجم انبوهی از کدهای تکراری روبرو میشوید. در اینجا است که ابزار AutoMapper به دادمان میرسد.
    کنترلر(با AutoMapper)
    بدون شک دنیا بعد از ابدای AutoMapper جای قشنگتری برای زیستن است! کافی است یک نگاه دوباره به کد مربوط به کنترلر بعد از استعمال AutoMapper بیاندازید.


    public ActionResult Index()
    {

    var user = GetUserInfo(Id: 10);

    var userView = Mapper.Map<User, UserView>(user);

    return View(userView);
    }

    }


    میبینید که عملیات Map کردن خصوصیات یک کلاس به سرعت و به زیبایی هرچه تمامتر انجام شد. البته راه اندازی AutoMapper کمی دردسر دارد ولی زمانی که صرف پیاده سازی آن می کنید به همه چیزهای دیگرش می ارزد.



    دانلود متن کامل مقاله به همراه پروژه ASP.MVC در VS2012

    آخرین ویرایش به وسیله hakim22 : شنبه 20 مهر 1392 در 10:17 صبح

تاپیک های مشابه

  1. معرفی کنترلهای ASP.Net و آموزش استفاده از آنها
    نوشته شده توسط IranVisual در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: سه شنبه 20 فروردین 1387, 09:11 صبح
  2. درخواست آموزش استفاده از DBISAM
    نوشته شده توسط kheyri در بخش بانک های اطلاعاتی در Delphi
    پاسخ: 3
    آخرین پست: جمعه 08 تیر 1386, 11:54 صبح
  3. آموزش استفاده از sql در VB
    نوشته شده توسط hidensoft در بخش SQL Server
    پاسخ: 18
    آخرین پست: چهارشنبه 26 اردیبهشت 1386, 23:50 عصر
  4. آموزش استفاده از محیط گرافیکی Xfce قسمت اول
    نوشته شده توسط tux-world در بخش توسعه‌ی لینوکس و نرم افزارهای آزاد
    پاسخ: 0
    آخرین پست: جمعه 08 دی 1385, 16:44 عصر
  5. آموزش استفاده از رجیستری در vb.net - قسمت اول
    نوشته شده توسط meandyouwith2003 در بخش VB.NET
    پاسخ: 2
    آخرین پست: شنبه 15 اسفند 1383, 00:34 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •