• بررسی منطق Repository Pattern و شکل پیاده سازی آن در یک پروژه ASP.NET MVC  قسمت پایانی
بررسی منطق Repository Pattern و شکل پیاده سازی آن در یک پروژه ASP.NET MVC قسمت پایانی
1395/02/16 - 15:01:41 // DataBase and Design Pattern // 3 نظر // 5109 بازدید

اهمیت این قسمت زیاد است ، چرا که باید از هر آنچه در Entity FrameWork و Repository گفته شد را در این قسمت در یک پروژه MVC استفاده کنیم.

بسمه تعالی

بررسی منطق Repository Pattern و شکل پیاده سازی آن در یک پروژه ASP.NET MVC

قسمت پایانی

اهمیت این قسمت زیاد است ، چرا که باید از هر آنچه در Entity FrameWork و Repository گفته شد را در این قسمت در یک پروژه MVC استفاده کنیم.

شروع کار با ایجاد یک MVC Project خواهد بود . مشابه تصویر یک پروژه MVC جدید ایجاد کنید .

 
 
 

خوب در مرحله بعدی ایجاد پروژه با دقت کنید که دقیقن مشابه تصویر زیر باشد ، چرا که هیچ مدلی از Authentication را قرار نیست استفاده کنم.

 
 
 

نوع را Authentication را None انتخاب کنید تا فعلا گرفتار Identity DbContext نشوید.

حالا 2 فولر Core و Persistence را که در پروژه قبلی داشتیم را به این پروژه اضافه کنید و همه NameSpace را تصحیح کنید .

 
 
 

اگر با پیام خطاهای مرتبط با Entity Frame Work در NameSpace ها روبرو شدید ، از طریق Nuget باید Entity FrameWork را نصب نمایید .

درون WebConfig رفته و Connection String را هم تنظیم نمایید.

 
 

درون Connection String باید عبارت Name را iliaContext را قرار دهید ، چرا که در DbContext هم به همین نام تایین شده است .

هر Controller به جز HomeController را از پروژه حذف کنید و Bundle و Filter و Route اگر فایل دیگر داشتید ، آنها را هم حذف کنید . این طوری درگیر Conflict با کلاس یا آیتم دیگری نخواهید شد .

حالا به سراغ Index View بروید .

 
 

سناریو همانطور که پیداست داشتن یک لیست از Course هاست و یک دکمه برای افزدون رکورد به لیست . پس دو متد در Controller نیاز داریم ، یکی برای نمایش لیست که همان Index است و دیگری برای ایجاد رکورد که همان Create است .

حال بسراغ HomeController برویم

در HomeController یک متد سازنده ایجاد خواهیم کرد .

از طریق این _Context کلیه مراحل را در سطح Controller انجام خواهد شد . متد Index را ببینید .

برای متد Create فقط یک محتوای ثابت داریم و متد ورودی ندارد ، پس متد به شکل زیر خواهد شد .

 
 
 

اگر به تصویر زیر دقت کنید ، خواهید دید که با OverRide کردن Dispose در سطح Controller میتوانم بعد از پایان کل روند Instant را در حافظه نابود کنم .

 
 
 

سوال : آیا همه چیز خوب است و دیگر باید راضی باشیم ؟. خیر این که نشد ، به تصویر زیر دقت کنید .

 
 
 

دوباره من DbContext را برداشته ام و به درون Controller آورده ام و تازه باید مثلن Dispose را هم خودم کد نویسی کنم. قرار شد Controller از DBContext و ... مستقل باشد و داستانهایی که قبلن کلی در موردش حرف زدیم و الان همه را نقض کرده ایم . پس چه کنیم؟

پاسخ : Unit Of Work برای همین ساخته شده است . مشابه زیر عمل کنید .

1- آن متد Dispose را که OverRide کردیم را کلن پاک کنید .

2- متد سازنده من بر اساسی Dependency Injection به شکل زیر خواهد شد.

 
 
 

همانطور که در تصویر میبینید ، دیگر _Context و کلن استفاده از DbContext در سطح Controller را بیخیال شدیم. حالا متد Index را تصحیح کنید.

 
 
 

خوب این هم از ایندکس . اینجا به خاطر IEumerAble بودن خروجیها ، دیگر به Tolist هم نیاز نیست و فقط باید متد GetAll را صدا کنیم. مشابه همین را در Create هم خواهیم داشت.

 
 
 

خوب حالا دیگر کاملن لایه ها جدا شده و هیچ وابستگی به DbContext در Controller ها نداریم . متد Saveهم رفت و از Complete باشد استفاده شود . حتی در NameSpace ها هم مشابه تصویر زیر ، دیگر از Persistence استفاده نخواهد شد .

 
 
 

خوب این شد همان چیزی که نیاز داشتیم . دیگر Repository Pattern را هم یاد گرفته اید و میتوانید در پروژه های MVC به آسانی استفاده کنید. در اینجا دیگر خیال من از پیش نیازها راحت شد و میتوانید با مطالعه مقالات Core 1 و این چند مقاله برای کار با AngularJS 2 در بستر ASP.NET MVC Core 1 آماده شوید .

علی کلاهدوزان
معرفی نویسنده : علی کلاهدوزان

سلام بر دوستان ،
شاید رایج است به عنوان پروفایل کاربر ، چند خطی راجع به خودم بنویسم ، ولی وضعیت کاری و سوابق من با یک جستجوی ساده در گوگل مشخص خواهد شد ، لذا سرتان را با مطالب بی مورد به درد نیاورم بهتر است . اگر نکته خاصی لازم بود بدانید در قسمت "ایلیا سافت در یک نگاه" به احتمال زیاد یافت خواهد شد . جزئیات بیشتر را سوال کنید ، آدرس ایمیل Ali@Kolahdoozan.com همیشه جوابگوی شماست .امیدوارم از مطالب سایت استفاده کرده باشید . شاد و پیروز باشید .

امتیاز به مطلب
           
نظرات کاربران
  • بهنام
    1395/04/05 - 13:20:13

    0
    0
    با سلام خیلی ممنون از آموزشتون من یه کم دچار ابهام هستم توی ساختار چند لایه. یکی از ابهاماتم اینه که در قسمت لایه سرویس میشه منطق سیستم رو پیاده سازی کرد، به عنوان مثال وقتی یه کاربر رو ویرایش میکنیم، کارهای زیر رو توش انجام بدیم - بررسی اینکه وجود داره یا نه. - اگه ویرایش کاربر انجام شد، یه جدول دیگه اینجا ویرایش شه - متناسب با رفتار یه پیغام رو به لایه بالاتر بفرستیم یا کلا قراره مثلا یه محاسباتی رو اطلاعات انجام بشه مثل کمیسیون، حالت هایی که داره در این لایه انجام بشه و پیام مناسب در این لایه صادر بشه با تشکر از شما
  • Amiri
    1396/06/07 - 12:04:48

    0
    0
    سلام مهندس آیا همین روش پیاده سازی Repository Pattern رو می شه در MVC Core هم بکار برد؟
  • امیر
    1396/08/29 - 17:24:25

    0
    0
    سلام و خسته نباشید مطلب شما رو درمورد ریپازیتوری مطالعه کردم و بسیار گویا بود.ممنون. منتها در مورد قسمت چهارم http://iliasoft.ir/p.aspx?name=Post&ID=182 یعنی بکارگیری آن در پروژه asp mvc بود، نتوانستم کار تا انتها با مطلب شما پیش ببرم.و پیغام خطای: No parameterless constructor defined for this object را دریافت میکنم. Dependency Injection را خودم باید پیاده سازی کنم؟ یا نیازی به پیاده سازی جداگانه Dependency Injection نیست و من جایی از کار را اشتباه پیش رفتم؟
ارسال نظر