可以編寫具有默認CRUD操作的存儲庫。例如:
public interface IRepository<TEntity>
{
TEntity FindByIdentity(object identity);
TEntity FindBy(Expression<Func<TEntity, bool>> specification);
IList<TEntity> FindAll();
IList<TEntity> FindAllBy(Expression<Func<TEntity, bool>> specification);
TEntity Save(TEntity saveable);
void Delete(TEntity deletable);
}
表達式>基本上規格和查詢可以是封裝的方式。如果我們有這樣的存儲庫那麼我們不需要編寫許多特定的存儲庫。
替代路徑是創建查詢對象。我們可以將該查詢的接口添加到核心/業務邏輯層,並將實現添加到服務/數據層。這樣我們可以很好地命名查詢,如AllPreferredCustomersQuery。它與規範非常相似,但規範不使用基礎架構,因此我們可能會將其添加到核心/業務邏輯層。 查詢對象是多個可配置的(例如,可以添加限制,取策略,聯接等)對受試者
兩個有用的帖子:由[麥博加德](http://www.lostechies.com/blogs/jimmy_bogard /archive/2009/09/02/ddd-repository-implementation-patterns.aspx)和[Greg Young](http://codebetter.com/blogs/gregyoung/archive/2009/01/16/ddd-the-仿製repository.aspx)。我傾向於採用混合方法:簡單操作的通用存儲庫和更復雜操作的查詢對象。我通常不會將存儲庫暴露給使用我的邏輯(UI,服務)的任何內容,但是會以類似於服務/外觀的模式提供功能,所以雙向方法不會暴露在此外觀層之外。 – tijmenvdk 2009-11-03 11:18:37