اول اینکه الگوی Unit of work چیست ؟ و دوم اینکه الگوی Unit of work چه کاربردی داره و چرا باید از اون استفاده کرد ؟
ترجمه لفظی الگوی طراحی Unit of work الگوی طراحی واحد کار است. در این الگو تمام درخواست ها در یک صف قرار می گیرند و با پایان یافتن تمام کار ها بانک به روز خواهد شد و دستور SaveChanges اجرا خواهد شد. اگر برنامه ای داشته باشید که آن را چند لایه تهیه کرده باشید نباید در هر لایه از DbContext استفاده کنید. بلکه فقط یک بار از کلاس DbContext نمونه ایجاد می کنیم. برای حل این مشکل الگویی به نام الگوی Unit Of Work طراحی شده است که در لایه های مختلف برنامه یک unit of work به اشتراک گذاشته می شود.
این روش مزیت های بسیاری دارد که یک نمونه از آن این است که کانکشنی که به بانک باز می شود کمترین تعداد را دارد و با همان کانکشن باز کلیه عملیات انجام می گیرد ، زمانی که از یک الگوی واحد کار استفاده می کنیم امکان بررسی خودکار تغییرات انجام شده بر روی یک Entity در لایه های مختلف به راحتی امکان پذیر است.
الگوی طراحی واحد کار بهصورت خودکار از مفهوم Transaction استفاده می کند و اگر در حین فراخوانی متد SaveChanges مشکلی پیش بیاید کل عملیات Rollback خواهد شد و تغییری در بانک اطلاعاتی رخ نخواهد داد. در نتیجه یک تراکنش به ازای چند عمل داریم نه یک تراکنش به ازای هر عمل.
پاسخ AliNoori بسیار عالی و کامل بود. یک سری نکات هم بهش اضافه میکنم.
معمولا در پروژه ها یک سری عملیات دیتابیس هست که مرتبا تکرار میشه. این عملیات :
هستن. به اختصار به این عملیات CRUD گفته میشه. برای انجام عملیات CRUD نیاز هست که یک ارتباط مستقیم با دیتابیس برقرار بشه که چون در اکثر پروژه ها از معماری های چند لایه مثل معماری پیازی استفاده میشه این کار توصیه نمیشه.
به همین خاطر میان و از لایه Service یا همون Interface ها استفاده می کنن تا ارتباط بین دیتابیس و کنترلر به صورت مستقیم برقرار نشه. دستورات CRUD معمولا در پروژه ها فقط یکبار و به صورت Generic نوشته میشن. یعنی یکبار نوشته میشن و در طول پروژه بارها از اون استفاده میشه.
حالا با این توضیحات استفاده از الگوی Unit Of Work یکسری مزایا داره :
چرا باید از الگوی Unit Of Work استفاده کرد
برای آموزش کامل الگوی Unit Of Work میتونید این آموزش رو مشاهده بفرمایید.
1- الگوی unit of work همیشه همراه با repository استفاده میشه یا به تنهایی هم قابل استفاده است؟
2- در پروژه های کوچیک که نیاز به ریپازیتوری و لایه سرویس نیست، میشه برای جلوگیری از تکرار، کلاس جنریک بدون ریپازیتوری ایجاد کرد؟
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
58
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
98
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1031
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
426
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1348
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4796
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
205
- پاسخ :
1
|
تاریخ :
1403/07/26
- ساعت :
09:00:00 PM
- بازدید :
116
- پاسخ :
0
|
تاریخ :
1403/05/16
- ساعت :
09:57:00 AM
- بازدید :
395
- پاسخ :
2
|
تاریخ :
1403/06/25
- ساعت :
11:39:00 PM
- بازدید :
562
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
58
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
98
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1031
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
426
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
930
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1348
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4796
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1157
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
595
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
205
- پاسخ :
1
|