Bạn chắc chắn không phải là người nhầm lẫn mọi thứ. :-)
Tôi nghĩ câu trả lời cho câu hỏi phụ thuộc vào mức độ bạn muốn trở thành một người theo chủ nghĩa thuần khiết.
Nếu bạn muốn có một quan điểm DDD nghiêm ngặt, điều đó sẽ đưa bạn đi theo một con đường. Nếu bạn xem kho lưu trữ như một khuôn mẫu đã giúp chúng tôi chuẩn hóa giao diện của lớp ngăn cách giữa các dịch vụ và cơ sở dữ liệu, nó sẽ đưa bạn xuống một lớp khác.
Theo quan điểm của tôi, kho lưu trữ chỉ là một lớp truy cập dữ liệu được chỉ định rõ ràng, hay nói cách khác là một cách tiêu chuẩn hóa để triển khai Lớp truy cập dữ liệu của bạn. Có một số khác biệt giữa các triển khai kho lưu trữ khác nhau, nhưng khái niệm thì giống nhau.
Một số người sẽ đặt nhiều ràng buộc DDD hơn vào kho lưu trữ trong khi những người khác sẽ sử dụng kho lưu trữ như một trung gian thuận tiện giữa cơ sở dữ liệu và lớp dịch vụ. Một kho lưu trữ như DAL cô lập lớp dịch vụ khỏi các chi tiết cụ thể về truy cập dữ liệu.
Một vấn đề triển khai dường như làm cho chúng khác nhau, đó là một kho lưu trữ thường được tạo với các phương thức có đặc điểm kỹ thuật. Kho lưu trữ sẽ trả về dữ liệu thỏa mãn đặc điểm kỹ thuật đó. Hầu hết các DAL truyền thống mà tôi đã thấy, sẽ có một tập hợp các phương thức lớn hơn, nơi phương thức sẽ nhận bất kỳ số lượng tham số nào. Mặc dù điều này nghe có vẻ là một sự khác biệt nhỏ, nhưng đó là một vấn đề lớn khi bạn bước vào lĩnh vực Linq và Expressions. Giao diện kho lưu trữ mặc định của chúng tôi trông như thế này:
public interface IRepository : IDisposable
{
T[] GetAll<T>();
T[] GetAll<T>(Expression<Func<T, bool>> filter);
T GetSingle<T>(Expression<Func<T, bool>> filter);
T GetSingle<T>(Expression<Func<T, bool>> filter, List<Expression<Func<T, object>>> subSelectors);
void Delete<T>(T entity);
void Add<T>(T entity);
int SaveChanges();
DbTransaction BeginTransaction();
}
Đây là DAL hay kho lưu trữ? Trong trường hợp này, tôi đoán là cả hai.
Kim