الگوی Unit of work چیست ؟
اول اینکه الگوی Unit of work چیست ؟ و دوم اینکه الگوی Unit of work چه کاربردی داره و چرا باید از اون استفاده کرد ؟
ترجمه لفظی الگوی طراحی Unit of work الگوی طراحی واحد کار است. در این الگو تمام درخواست ها در یک صف قرار می گیرند و با پایان یافتن تمام کار ها بانک به روز خواهد شد و دستور SaveChanges اجرا خواهد شد. اگر برنامه ای داشته باشید که آن را چند لایه تهیه کرده باشید نباید در هر لایه از DbContext استفاده کنید. بلکه فقط یک بار از کلاس DbContext نمونه ایجاد می کنیم. برای حل این مشکل الگویی به نام الگوی Unit Of Work طراحی شده است که در لایه های مختلف برنامه یک unit of work به اشتراک گذاشته می شود.
این روش مزیت های بسیاری دارد که یک نمونه از آن این است که کانکشنی که به بانک باز می شود کمترین تعداد را دارد و با همان کانکشن باز کلیه عملیات انجام می گیرد ، زمانی که از یک الگوی واحد کار استفاده می کنیم امکان بررسی خودکار تغییرات انجام شده بر روی یک Entity در لایه های مختلف به راحتی امکان پذیر است.
الگوی طراحی واحد کار بهصورت خودکار از مفهوم Transaction استفاده می کند و اگر در حین فراخوانی متد SaveChanges مشکلی پیش بیاید کل عملیات Rollback خواهد شد و تغییری در بانک اطلاعاتی رخ نخواهد داد. در نتیجه یک تراکنش به ازای چند عمل داریم نه یک تراکنش به ازای هر عمل.
پاسخ AliNoori بسیار عالی و کامل بود. یک سری نکات هم بهش اضافه میکنم.
معمولا در پروژه ها یک سری عملیات دیتابیس هست که مرتبا تکرار میشه. این عملیات :
- Insert یا Create
- Update
- Delete
- Select یا Read
هستن. به اختصار به این عملیات CRUD گفته میشه. برای انجام عملیات CRUD نیاز هست که یک ارتباط مستقیم با دیتابیس برقرار بشه که چون در اکثر پروژه ها از معماری های چند لایه مثل معماری پیازی استفاده میشه این کار توصیه نمیشه.
به همین خاطر میان و از لایه Service یا همون Interface ها استفاده می کنن تا ارتباط بین دیتابیس و کنترلر به صورت مستقیم برقرار نشه. دستورات CRUD معمولا در پروژه ها فقط یکبار و به صورت Generic نوشته میشن. یعنی یکبار نوشته میشن و در طول پروژه بارها از اون استفاده میشه.
حالا با این توضیحات استفاده از الگوی Unit Of Work یکسری مزایا داره :
چرا باید از الگوی Unit Of Work استفاده کرد
- اولین دلیل استفاده از الگوی Unit Of Work عدم دسترسی مستقیم کنترلر به دیتابیس هنگام عملیات CRUD می باشد. چون در اینجا ارتباط با استفاده از کلاس و اینترفیس مربوط به Unit Of Work برقرار میشه.
- دلیل دوم هم بحث افزایش امنیت دیتابیس می باشد.
- و اما یکی از دلایل مهم استفاده از الگوی Unit Of Work این می باشد که اگر درخواستی نیاز به چندین بار ارتباط با دیتابیس باشد در هر ارتباط یک نمونه از دیتابیس در سرور ساخته می شود که اگر تعداد درخواست ها بالا باشه سرعت دیتابیس و سرور رو کند میکنه. اما در الگوی Unit Of Work کنترل میشه که در هر لحظه بیشتر از یک نمونه از دیتابیس وجود نداشته باشه.
برای آموزش کامل الگوی Unit Of Work میتونید این آموزش رو مشاهده بفرمایید.
1- الگوی unit of work همیشه همراه با repository استفاده میشه یا به تنهایی هم قابل استفاده است؟
2- در پروژه های کوچیک که نیاز به ریپازیتوری و لایه سرویس نیست، میشه برای جلوگیری از تکرار، کلاس جنریک بدون ریپازیتوری ایجاد کرد؟
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- نمایش صفحه در پنجره جدید با کلیک روی لینک (تگ a) در Asp
- افزودن مقادیر به صورت دستی به List دریافت شده از ریپازیتوری
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2