Varsayılan CRUD işlemlerine sahip depo yazmak mümkündür. Örneğin:
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);
}
İfade> temelde Şartname ve sorgular bu şekilde saklanması olabilir. Eğer bu tür Deposu varsa, birçok özel depoya yazmamız gerekmez.
Alternatif yol, Sorgu nesnesini oluşturur. Bu sorgunun arayüzünü Core/Busines Logic katmanına ekleyebilir ve Services/Data katmanına uygulayabiliriz. Bu şekilde, AllPreferredCustomersQuery gibi güzel adlandırılmış sorgularımız var. Teknik özelliklere oldukça benziyor, ancak özellikler altyapı kullanmıyor ve bu nedenle Core/Business Logic katmanına ekleyebiliriz. Query nesneler daha fazla yapılandırılabilir (örneğin, limit eklemek, stratejileri eklemek, birleştirmek vb.)
Konuyla ilgili iki yararlı mesaj: [Jimmy Bogard] (http://www.lostechies.com/blogs/jimmy_bogard /archive/2009/09/02/ddd-repository-implementation-patterns.aspx) ve [Greg Young] tarafından (http://codebetter.com/blogs/gregyoung/archive/2009/01/16/ddd-the- jenerik-repository.aspx). Karma bir yaklaşıma yöneliyorum: basit eylemler için genel depolar ve daha karmaşık olanlar için sorgu nesneleri. Genellikle depolarımı mantığımı (UI, hizmet) kullanan herhangi bir şeye maruz bırakmam fakat hizmet/cepheye benzer bir modelde işlevsellik sunmam, bu yüzden ikili yaklaşım bu cephe tabakasının dışına çıkmıyor. – tijmenvdk