Anda pasti bukan orang yang membingungkan banyak hal. :-)
Saya pikir jawaban atas pertanyaan itu tergantung pada seberapa besar Anda ingin menjadi seorang purist.
Jika Anda menginginkan sudut pandang DDD yang ketat, itu akan membawa Anda ke satu jalur. Jika Anda melihat repositori sebagai pola yang telah membantu kami menstandarisasi antarmuka lapisan yang memisahkan antara layanan dan database, ini akan menurunkan Anda.
Repositori dari sudut pandang saya hanyalah lapisan akses data yang ditentukan dengan jelas, atau dengan kata lain cara standar untuk menerapkan Lapisan Akses Data Anda. Ada beberapa perbedaan antara implementasi repositori yang berbeda, tetapi konsepnya sama.
Beberapa orang akan menempatkan lebih banyak batasan DDD pada repositori sementara yang lain akan menggunakan repositori sebagai mediator yang nyaman antara database dan lapisan layanan. Repositori seperti DAL mengisolasi lapisan layanan dari spesifikasi akses data.
Salah satu masalah implementasi yang tampaknya membuatnya berbeda, adalah bahwa repositori sering dibuat dengan metode yang mengambil spesifikasi. Repositori akan mengembalikan data yang memenuhi spesifikasi tersebut. Kebanyakan DAL tradisional yang pernah saya lihat, akan memiliki kumpulan metode yang lebih besar di mana metode tersebut akan mengambil sejumlah parameter. Meskipun ini mungkin terdengar seperti perbedaan kecil, ini adalah masalah besar ketika Anda memasuki ranah Linq dan Ekspresi. Antarmuka repositori default kami terlihat seperti ini:
public interface IRepository : IDisposable
{
T[] GetAll<T>();
T[] GetAll<T>(Expression<Func<T, bool>> filter);
T GetSingle<T>(Expression<Func<T, bool>> filter);
T GetSingle<T>(Expression<Func<T, bool>> filter, List<Expression<Func<T, object>>> subSelectors);
void Delete<T>(T entity);
void Add<T>(T entity);
int SaveChanges();
DbTransaction BeginTransaction();
}
Apakah ini DAL atau repositori? Dalam hal ini saya rasa keduanya.
Kim