比方說,我需要顯示一個客戶列表,但只想顯示名稱,並以某種方式將鍵關聯到列表控件中的名稱。從Repository <T>返回數據子集的可能方法?
檢索客戶及其所有屬性的整個列表可能代價高昂。在這種情況下,創建另一個具有所需屬性(在本例中爲Id和Name)的類會更好嗎?
基本實現看起來是這樣的:
public class Customer {
public int Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public int Age { get; set; }
.....
}
public class CustomerListView {
public int Id { get; set; }
public string Name { get; set; }
}
public interface IRepository<T> {
public T Find(int id);
public IEnumerable<T> FindAll();
....
}
public class Repository<T>: IRepository<T> {
....
}
public class CustomerRepository: Repository<Customer> {
public IEnumerable<CustomerListView> FindAllListView();
}
請問這種做法是合適的?還有什麼其他選擇?
這是一個有趣的想法,我沒有考慮過。除了將我的存儲庫耦合到LINQ之外,還有其他的原因可以避免這種情況嗎?我一直認爲知識庫的責任是提供對域對象的訪問。無論如何,我會研究這個建議,因爲如果必須的話,我不介意偏離「純粹」DDD。 – Joepro 2009-09-22 00:07:10
LINQ是C#的核心功能,所以不用擔心。這種設計模式通常被視爲Repository,但它比任何事情都更加活躍。我經常做的是使用裝飾模式,並將類型的擴展方法進行進一步過濾。 – 2009-09-22 16:36:56