Xin chào mọi người,
Mình đang triển khai project .NET Core Web App (MVC) với mô hình nhiều lớp như sau:
— Controller Layer —
-
Xử lý HTTPRequest, HTTPResponse, Localization.
-
Sử dụng các instance của Services Layer.
— Service Layer —
-
Chứa các business logic.
-
Sử dụng các instance của Repository Layer (Vd services A chỉ dùng Repo A).
-
Sử dụng các instance của các Services khác. (Cần để ý đến circular dependency crash)
— Repository Layer —
-
Đóng gói EF-Core, định nghĩa các thao tác lấy dữ liệu dưới DB.
-
Mỗi Repo đóng vai trò kiểm soát dữ liệu cụ thể (vd ProductRepo, BookInfoRepo, BookDetailRepo, …) hay cụ thể là mỗi entity một Repo.
Khi triển khai mô hình trên, em thấy mô hình làm ra rất clear, dễ dàng fixbug hoặc scale khi khách hàng có thay đổi yêu cầu - logic hoặc cấu trúc dữ liệu.
Nhưng việc triển khai này khá tốn thời gian - phải khai báo nhiều interface + class - register DI, và đôi khi em thấy tầng Repository hơi vô dụng (vì phải khai báo quá nhiều).
VD:
Khi với trường hợp Data1, với mỗi file Data1 import là thông tin của file (info) và dữ liệu đã import (detail) -> sinh ra 2 repo.
Em thấy nhiều lúc khá băn khoăn và thấy mình áp dụng chưa đúng hoàn cảnh. Em cũng có tham khảo thêm mô hình DDD, nhưng vẫn chưa có lời giải cho cấu trúc dự án.
Có lẽ em không nên đóng gói DBContext lại (vì sở dĩ DBContext hay DBSet<> là 1 Repository). Có ai từng gặp trường hợp như em không ạ.
Đôi khi em cảm thấy mình đang ‘dùng dao mổ trâu để giết gà chăng’,
hay từ khi mình tìm hiểu áp dụng các Design Pattern, sự lo lằng về Tight couping, về Single Responsibility đã thấm nhuần vào tư tưởng, cách triển khai các vấn đề.
Rất vui nếu được mọi người đón nhận và chia sẻ, góp ý cho em, em xin cảm ơn.
Cảm ơn nếu đã dành thời gian quan tâm đến vấn đề của em.
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?