Unit Of Work Là Gì

     

Mình đã đọc về unit of work pattern kết hợp với repository pattern.Unit of work mục đích để các controller khi tiến hành thêm xóa sửa database thì dbContext vẫn dùng chung với nhau thay bởi vì 1 controller tạo nên 1 DbContext.Các các bạn cho mình hỏi, nếu sử dụng dependency injection (DI) cùng set lifetime mang đến DbContext là scoped (1 request chế tạo 1 cái) thì có đúng lúc nói unit of work không còn có lợi nữa?


Mình cũng new đọc C# (do dnh có không ít người pro-C# quá đề xuất thử coi sao) được vài ba ngày nên mặc dù nguyên lý của UoW+RP là tương đương như trên những ngôn ngữ khác, implementation của UoW+RP trên Entity Framework có thể sẽ không hoàn toàn như cách mình hiểu cùng viết dưới đây.

Bạn đang xem: Unit of work là gì

Như cách các bạn nói:

Unit of work mục tiêu để những controller khi thực hiện thêm xóa sửa database thì dbContext sẽ dùng chung với nhau thay vì chưng 1 controller chế tạo 1 DbContext.

Thì nó chỉ là 1 phần của UoW, mục đích chính của UoW là tạo thành 1 abstraction layer giữa ngắn gọn xúc tích domain với persistance medium (cái này đúng ra là từ bỏ Repository Pattern) + keep track of the object changes (có thể đọc là mọi biến hóa của object - ở trong súc tích domain - đều buộc phải được ghi nhận) để sau đây sẽ reflect lên persistance medium.

Theo như ví dụ như trên msdn thì dbcontext chỉ là 1 thành bên trong UoW (mặc dù có nhiều cách implementation khác nữa), bạn có thể xem tại: https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

Trở lại câu hỏi của bạn:


*
dinhphhu951998:

Các các bạn cho bản thân hỏi, nếu sử dụng dependency injection (DI) với set lifetime cho DbContext là scoped (1 request tạo 1 cái) thì có đúng lúc nói unit of work ko còn bổ ích nữa?

Không trả toàn, UoW vẫn rất hữu ích trong các trường thích hợp sau:

Business domain của doanh nghiệp phức tạp.Logic domain của khách hàng phức tạp.Parallel execution.

Xem thêm: Cách Làm Ốc Nhồi Thịt Hấp Lá Gừng Hương Vị Thơm Phức Ăn Thích Cực

Ngoài ra m không rõ việc bạn thực hiện DI trong trường hợp này sẽ ra sao, theo m hiểu thì nó nằm trọn vẹn ở 1 layer khác.

Để m rước ví dụ cho 1 trong 3 trường hợp trên.

Course course = unitOfWork.CourseRepository.GetByID(id);course.name = "That"s how UoW works"https:// 100 lines of codescourse.slug = "that"s-how-uow-works"unitOfWork.CourseRepository.Update(course);trong ví dụ như trên thì unitOfWork sẽ theo dõi toàn bộ biến đổi của object course, đối chiếu với repository của nó, cùng update những thay đổi đó vào persistance medium (ở đây là Entity Framework).

Xem thêm: Top 3 Bài Tóm Tắt Văn Bản Bến Quê Ngắn Gọn, Dễ Hiểu, Bài Văn Mẫu Lớp 9

Dĩ nhiên, với hầu như trường hợp dễ dàng như lấy ví dụ như trên, các bạn hoàn toàn rất có thể chẳng cần áp dụng UoW làm những gì cả, bạn thậm chí viết luôn luôn sql và query tức thì tại controller, mặc dù nhiên bạn sẽ không thể decouple được những thành phần, dẫn tới cực nhọc viết test, khó duy trì hay unpredictable code.