Sejauh yang saya pelajari, IRepository
seharusnya berisi CRUD
. Kemudian kita mewarisi ini IRepository
di Antarmuka kami yang lain seperti IProduct
dan menerapkan IProduct
kelas beton ProductRepository
, dengan metode seperti GetAllProducts()
, Top5Products()
.
Kita juga bisa melakukan hal yang sama dengan arsitektur n-tier. seperti, Membuat DAL Class Library
dan di dalamnya mendefinisikan kelas Product
dengan metode seperti GetAllProducts()
, Top5Products()
.
Dalam kedua DAL.Product
dan Repo.ProductRepository
kelas kita menginisialisasi DB Context
dari Entity Framework
dan query data yang relevan kami.
Pemanggilannya sama dalam kedua metode Repo.ProductRepository
atau DAL.Product
dariBLL
Mengingat kesamaan ini, pertanyaan saya apa manfaat Repos? Aku bisa melakukan hal yang sama dengan mudah banyak menggunakan arsitektur n-tier dengan ( Controller
, BLL Class Library
, DAL Class Library
).
Jawaban:
Pemahaman saya adalah:
DAL (Data Access Layer) mengacu pada lapisan dalam perangkat lunak Anda yang berada di antara teknologi kegigihan Anda dan logika aplikasi Anda. Tujuannya adalah untuk memisahkan masalah akses data dari masalah aplikasi Anda. Ini adalah konsep umum .
Repositori adalah konsep dari DDD (Domain Driven Design).
Dalam DDD, Repositori bertanggung jawab untuk mengenkapsulasi semua masalah akses data untuk Agregat tertentu . Ini datang dengan tanggung jawab untuk memastikan konsistensi selama membaca dan menulis Agregat. Dan Agregat adalah pengelompokan Entitas terkait (misalnya
Product
,Store
, dll).Jadi, suatu Repositori secara khusus menyadari masalah kegigihan dan konsistensi Agregatnya. DAL umum Anda kemungkinan besar akan terdiri dari Gudang khusus
TL; DR;
sumber
Anda membandingkan dua konsep yang berbeda dan saling melengkapi:
DAL dalam contoh Anda
Menariknya, dalam contoh perpustakaan kelas Anda,
DAL.Product
tampaknya menjadi repositori. Jadi itu normal bahwa Anda tidak benar-benar melihat perbedaan: dari sudut pandang implementasi itu sama (dalam kasus khusus ini).Tetapi tidak harus; DAL dapat diimplementasikan secara berbeda, misalnya:
Apa yang berbeda untuk repositori
Konsep repositori tidak tergantung pada model arsitektur dan implementasinya. Anda tidak perlu memikirkan lapisan atau basis data. Yang perlu Anda ketahui ketika Anda mendesain domain Anda, adalah bahwa objek Anda berada di repositori yang merupakan jenis khusus dari koleksi penyihir yang menawarkan kegigihan. Ini membuatnya sangat cocok untuk desain domain dan menjelaskan mengapa mereka adalah elemen kunci dari Desain Domain Driven .
Dalam DDD, repositori memiliki beberapa aturan yang harus dihormati: mereka memberikan akses ke agregat (entitas independen, atau sekelompok entitas terkait yang bergantung pada akar agregat) dan ada satu repositori tunggal per agregat.
sumber