Tôi đã đọc các bài viết về StackOverflow và các trang web khác cả ngày về thực tiễn kiến trúc tốt nhất và có quá nhiều ý tưởng và ý kiến trái ngược nhau.Nếu Entity Framework/DbContext là DAL/Repository, nó phù hợp với kiến trúc 3 tầng ở đâu?
Cuối cùng tôi đã giải quyết một cách tiếp cận, nhưng tôi đang có một thời gian thực sự khó khăn quyết định nơi để đặt các đối tượng EF (DbContext, Fluent API, dữ liệu Seeding, vv). Dưới đây là những gì tôi hiện có:
Dự án ASP.NET MVC: Dự án web thực tế. Chứa các chế độ xem chuẩn, bộ điều khiển và Chế độ xem mô hình (bên trong một mô hình Mô hình).
Dự án mẫu miền: Chứa tất cả các lớp POCO xác định đối tượng cơ sở dữ liệu (tên miền). Hiện tại, không đề cập đến hoặc tham khảo bất kỳ đối tượng EF nào.
Dự án lớp dịch vụ: Chứa các đối tượng dịch vụ cho từng loại đối tượng miền (ví dụ: IProductService, IOrderService, v.v ...). Mỗi dịch vụ tham chiếu đến các đối tượng EF như DbSets và xử lý các quy tắc kinh doanh - ví dụ: thêm Sản phẩm, tìm Sản phẩm, thêm Sản phẩm vào Đơn hàng, v.v.
Câu hỏi đặt ra là ở đâu? Ban đầu tôi nghĩ trong Lớp dịch vụ, nhưng điều đó dường như không có ý nghĩa. Sau đó tôi nghĩ rằng để đặt chúng trong Lớp Mô hình Miền, nhưng sau đó nó liên kết Mô hình Miền với EF, về bản chất là một DAL/Repository. Cuối cùng, tôi nghĩ về việc tạo ra một dự án DAL riêng cho EF, nhưng nó có vẻ như một sự lãng phí rất lớn khi xem xét nó có khả năng sẽ có 3-4 tệp trong đó (DbContext và một vài tệp nhỏ khác).
Có ai có thể cung cấp bất kỳ hướng dẫn nào không?
Điều gì đang thúc đẩy bạn tạo ba dự án thay vì chỉ một dự án? –
Khả năng mở rộng tốt hơn. Với một dự án riêng biệt cho các mô hình miền và một cho các dịch vụ, bạn có thể có một ứng dụng khác (ví dụ, một ứng dụng WinForms) có thể dễ dàng tiêu thụ miền và logic nghiệp vụ mà không cần phải sao chép mã. Ngoài ra, nếu có ứng dụng WinForms và ứng dụng MVC, những thứ như thay đổi quy tắc kinh doanh chỉ cần được thực hiện ở một nơi thay vì hai. – Amberite