試圖在這裏創建一個非常簡單的存儲庫和服務層模式。 (.NET 4,C#,LINQ,儘管這個問題部分與語言無關)。注意:這只是R & D.存儲庫/服務層設計模式的建議
我的目標是儘量減少我的服務層中的方法定義的數量。
這裏是我的倉庫合同:
interface IFooRepository
{
IEnumerable<Foo> Find();
void Insert(Foo foo);
void Update(Foo foo);
void Delete(Foo foo);
}
沒有什麼新東西。
現在,這裏是IM(試圖)有我的服務合同:
interface IFooDataService
{
public IEnumerable<Foo> Find(FooSearchArgs searchArgs);
}
從本質上講,任何特定的「富」有許多屬性(ID,姓名等),我想是能夠搜索。
所以,我不想有1x查找方法爲每個不同的屬性,我只想要一個 - 這種方式時,我創建額外的屬性,我不必修改合同。
「FooSearchArgs」只是一個簡單的POCO,它具有所有不同的「Foo」屬性。
所以,這就是我嘗試做的,這是我的問題:
- 這是糟糕的設計?如果是這樣,有什麼選擇?
- 我該如何在服務層實現這個過濾?我是否需要檢查「FooSearchArgs」的屬性設置,然後繼續過濾? (如果這樣,然後query.where,如果這,query.where等)任何人都有一個聰明的LINQ IEnumerable擴展方法做到這一點的想法? (即
repository.WhereMeetsSearchCriteria(fooSearchArgs)
)
感謝幫助。
一個有趣的事情。不過,我更喜歡使用延遲執行(LINQ),因爲它可以更好地控制查詢(允許我在服務層中構建它們)。由於使用其他設計模式來解決這個問題(即UnitOfWork),封閉的會話調用並不是問題。雖然(+1)謝謝你的回答 - 我有一個閱讀規格模式。 – RPM1984 2010-08-25 11:14:15
您可能會發現這個有趣的:http://huyrua.wordpress.com/2010/07/13/entity-framework-4-poco-repository-and-specification-pattern/ 這是一個如何實現使用規範和工作模式單元的持久性無知存儲庫。 – Bronumski 2010-08-25 11:30:48
而這一個:http://www.kitchaiyong.net/2009/10/repository-specification-unit-of-work.html。這個更深入一點。 – Bronumski 2010-08-25 11:36:11