2009-12-05 35 views
31

Tôi đã thấy hai phương pháp khác nhau để tạo kho lưu trữ chung. Sự khác nhau giữa hai cách tiếp cận (ưu và nhược điểm) là gì? Hãy diregard sự khác biệt trong phương pháp bởi vì tôi quan tâm đến sự khác biệt giữaKho lưu trữ chung - IRepository <T> hoặc IRepository

public interface IRepository<T> where T : class 

public interface IRepository : IDisposable 

Có sự khác biệt về tính năng, tính linh hoạt, kiểm tra đơn vị ...? Tôi sẽ bị mất gì?
Có sự khác biệt nào về cách chúng được đăng ký trong khung công tác Dependency Injection không?

Lựa chọn 1

public interface IRepository<T> where T : class 
{ 
     T Get(object id); 
     void Attach(T entity); 
     IQueryable<T> GetAll(); 
     void Insert(T entity); 
     void Delete(T entity); 
     void SubmitChanges(); 
} 

Lựa chọn 2

public interface IRepository : IDisposable 
    { 
     IQueryable<T> GetAll<T>(); 
     void Delete<T>(T entity); 
     void Add<T>(T entity); 
     void SaveChanges(); 
     bool IsDisposed(); 
    } 

Trả lời

27

Sự khác biệt lớn nhất là IRepository<T> được ràng buộc với một loại duy nhất trong khi một IRepository là khả năng liên kết với nhiều loại. Cái nào phù hợp phụ thuộc nhiều vào kịch bản cụ thể của bạn.

Nói chung tôi thấy IRepository<T> hữu ích hơn. Tại thời điểm sử dụng, nó rất rõ ràng nội dung của IRepository<T> là (T). Mặt khác, nó không rõ ràng từ một số IRepository cho trước những gì được chứa bên trong nó.

Trong trường hợp tôi phải lưu trữ nhiều loại đối tượng, tôi thường tạo bản đồ các trường hợp IRepository<T>. Ví dụ: Dictionary<T,IRepository<T>>.

+5

Khi thực thể của tôi có các phương pháp rất khác nhau, tôi không khuyên bạn nên triển khai IRepository cho mọi thực thể vì mỗi thực thể sẽ có một triển khai trống của một phương thức mà nó có thể không sử dụng. Chỉ sử dụng IRepository nếu các thực thể của bạn có nhiều phương pháp phổ biến khác, các lớp Kho lưu trữ của bạn sẽ kết thúc bằng các phương thức trống. – msfanboy

+2

Tôi không nghĩ một phương pháp trống rỗng nào nguy hiểm như một thế giới khổng lồ, kết thúc thế giới. – ProfK

Các vấn đề liên quan