Kami menggunakan sekelompok kelas yang terpisah dengan akhiran -repository
untuk mengambil data dari database; untuk setiap tabel repositori sendiri.
Kami memiliki misalnya customerrepository
kelas yang memiliki semua jenis metode untuk mengambil pelanggan, dan vacancyrepository
yang memiliki semua jenis metode untuk mengambil lowongan.
Saya punya dua pertanyaan tentang cara melakukan hal-hal ini:
Bagaimana dengan mendapatkan data yang mencakup beberapa tabel? Misalnya saya memiliki layar yang menunjukkan semua pelanggan yang belum membuat lowongan. Bisakah
customerrepository
metode yang digunakan darivacancyrespository
, atau apakah kedua repositori mengembalikan hasil dan apakah ada kelas yang lebih tinggi dalam hierarki (sebut saja adataservice
) yang mendapatkan hasil dari kedua repositori dan menggabungkannya ke dalam 1 hasil?berapa banyak logika yang bisa ditangani oleh repositori seperti itu?
Saya pikir tidak apa-apa untuk mengimplementasikan 'where active == true' dalam repositori untuk mengambil hanya rekaman yang aktif, atau haruskah logika sederhana itu ditangani oleh kelas yang lebih tinggi dalam hierarki (beri nama adataservice
)?
Contoh yang saya temui sekarang adalah yang ini:
Kami memiliki daftar pertanyaan, yang berisi satu atau lebih pertanyaan.
Pertanyaannya dapat memiliki hasil, yang disimpan dalam tabel terpisah.
Jadi, ketika Anda ingin mengambil hasil total dari daftar pertanyaan, Anda harus menggabungkan data dari questionlist
tabel, tabel pertanyaan dan questionstatus
tabel.
Saat ini kami memiliki 3 repositori berbeda untuk tabel ini.
Jika saya akan bertanya questionlistrepository
apa itu hasil total untuk daftar nomor 12, itu harus mendapatkan data dari dua repositori lain dan karenanya memiliki beberapa logika di dalamnya, apakah itu diperbolehkan?
Atau adakah questionlistdataservice
yang tahu repositori mana yang digunakan?
Satu hal lagi: repositori kami dapat menghasilkan IQueryable
sehingga layanan panggilan dapat dengan mudah menggabungkan hasilnya, tetapi bagaimana ketika ini tidak terjadi, saya tidak berpikir itu ide yang baik untuk mengambil semua konten dari ketiga tabel dari basis data.
sumber
Jawaban:
Repositori mengembalikan objek domain dan dibangun di atas lapisan pemetaan. Untuk domain yang sangat sederhana, objek domain dan tabel database bisa sangat mirip.
Jika repositori Anda selalu mengembalikan representasi tepat dari struktur data Anda maka itu mungkin sebenarnya Table Data Gateway alias Data Access Object (DAO).
Contoh: Basis data Anda memiliki tabel untuk orang dan alamat. Di alamat domain aplikasi Anda bukan entitas miliknya sendiri, itu hanya properti Person. Dalam hal ini Anda tidak akan memiliki PersonRepository dan AddressRepository. Anda hanya memiliki PersonRepository. Domain tidak perlu khawatir tentang bagaimana data domain bertahan. Tanggung jawab tersebut berada di lapisan di belakang repositori.
Dari contoh Anda tampaknya Anda benar-benar memiliki DAO dan baru saja menamainya Repositori.
sumber