سلام دوستان.
یه موردی هست می خواستم نظرتون رو بدونم.
مطمئنا خیلی جاها خوندین که استفاده از Repositroy و Unit of work اشتباه هست..چون خود DbContext حکم همین داستان رو داره.
من خودم طبق یه مقاله ای الگوی repository,unitofwork رو استفاده کردم که یه مقداری پیچیدگی میاره و بیشتر به درد پروژه های خیلی بزرگ میخوره.مثلا بحث تست واحد رو پوشش میده که اصلا به درد کار من نمیخوره و اینکه از autofac استفاده میکنه برای تزریق وابستگی..حالا من اصلا نیازی به این کارها ندارم.
--------------------------------------------------------------------------------------------------------------
حالا فرض کنید پروژه ای که قرار هست استارت بزنیم یه پروژه کوچیک هست مثلا یه CMS.
داشتن لایه سرویس که بیزینس کار داخلش نوشته میشه میتونه مفید باشه برای برنامه نویس که منطق برنامه رو داخل اکشن های کنترلر پیاده سازی نکنه.
حالا اگه بخوام این لایه سرویس رو پیاده سازی کنم بحث Roll Back ممکنه داخل سیستم اتفاق بیوفته. یک مثال میزنم.
فرض کنید کاربر قرار هست که یک مطلب رو به همراه تگ های اون ثبت کنه.
یعنی دوتا از جداول با زدن دکمه ثبت دچار تغییر میشن.
جدول اول به درستی تغییر میکنه و جدول دوم به هر دلیلی با خطا مواجه میشه.
جدول اول لایه سرویس مربوط به خودش رو داره و جدول دوم هم به همین صورت.
اگر داخل لایه سرویس متد SaveChange صدا زده بشه دیگه نمیش عملیات Roll Back رو انجام داد.
سوال اصلیه من اینه که این SaveChange رو چجوری باید پیاده سازی کنیم که به اصطلاح Context برنامه ما یکی باشه و همه ی سرویس ها از یک Context استفاده بکنن؟
بحث بعدی هم Dispose کردن اون هست که به شکلی باید باشه.
مثلا توی هر لایه سرویس باید dbcontext رو new بکنیم و ازش استفاده کنیم ولی متد Savechange رو چجوری داشته باشیم؟