Chúng tôi có bản repo trong DAL. BLL tham khảo các kho lưu trữ thông qua một giao diện - vì vậy các kho được gắn với DAL nhưng tách khỏi BLL. Tôi không biết lý do nào tại sao các kho lưu trữ không thể trực tiếp trong BLL. Chúng tôi đã có chúng trong DAL như chúng tôi không đặt bất kỳ logic trong họ. Sau đó chúng tôi có "Người quản lý" trong BLL bao bọc các kho lưu trữ và xử lý logic cụ thể theo thực thể.
FWIW chúng tôi thực sự có chung Repository(Of IEntity)
và sử dụng sự thống nhất để khởi tạo kho lưu trữ thích hợp theo yêu cầu - nó rất nhỏ gọn và khá thanh lịch. Tất cả các thực thể POCO của chúng tôi thực hiện IEntity có chứa Id
, CreatedDate
, v.v. phổ biến cho TẤT CẢ các thực thể của chúng tôi. Điều này cho phép một số lợi ích khác khi bạn cần để xử lý bất kỳ loại thực thể tổng quát - CreatedDate
được thiết lập bởi kho khi CreateInstance()
được gọi, ModifiedDate
được thiết lập bởi bối cảnh riêng của mình khi nó cam kết một thực thể với tình trạng Modified
Chúng tôi tiếp tục các thực thể trong một dự án riêng biệt - DAL cần có khả năng tham khảo chúng, cũng như BLL. Bạn không muốn chúng trong DAL khi trao đổi DAL ra sẽ gây ra vấn đề. Bạn không thể đặt chúng trong BLL hoặc bạn nhận được một tham chiếu vòng tròn. Cấu hình cho các thực thể có thể sống trong DAL vì nó là nguồn dữ liệu cụ thể.
Chúng tôi cố gắng gắn bó với BLL trong các nguyên thủy và trả lại các thực thể. Hãy cẩn thận về việc giữ các thực thể trong giao diện người dùng quá lâu, đặc biệt trong ứng dụng web vì bạn có thể có ngữ cảnh khác theo DAL khi bạn trả về thực thể cho BLL để xử lý (nghĩa là qua các yêu cầu được lưu trữ trong phiên hoặc tương tự) có thể dẫn đến tất cả các loại thú vị gắn/tách thực thể từ ngữ cảnh và mất cho bạn một số lợi ích như theo dõi thay đổi.
Hy vọng rằng sẽ giúp nhưng nếu bạn muốn làm rõ, hãy để tôi biết
Nếu một trong các câu trả lời của chúng tôi giúp, vui lòng đánh dấu nó là được chấp nhận – Basic