Saya telah mendengar banyak pola repositori, tetapi saya tidak mengerti apa yang harus dilakukan repositori. Ketika saya mengatakan "repositori apa yang benar-benar harus dilakukan" saya terutama khawatir tentang metode apa yang harus disediakan. Misalnya, apakah repositori benar-benar menyediakan metode CRUD, atau haruskah menyediakan beberapa jenis metode yang berbeda?
Maksud saya, haruskah repositori berisi logika bisnis, atau haruskah hanya berisi logika untuk berkomunikasi dengan penyimpanan data dan mengelola entitas yang akan disimpan atau dimuat?
Saya juga pernah mendengar bahwa repositori adalah unit kegigihan untuk kelompok unsur kehidupan. Tapi bagaimana itu? Saya gagal memahami bagaimana ini bekerja dalam prakteknya. Saya berpikir bahwa kita harus memiliki hanya satu antarmuka IRepository
yang berisi metode CRUD, dan kemudian untuk entitas apa pun implementasinya hanya akan berisi logika untuk menyimpan dan mengambil jenis seperti itu dari penyimpanan data.
sumber
Jawaban:
Nah, Anda dapat melihat contoh yang baik dalam Kerangka Kerja Data Spring yang didasarkan pada konsep repositori.
Di sana Anda akan melihat repositori hanya berurusan dengan penyimpanan data, dan jarang mengandung logika bisnis (ini dicadangkan untuk lapisan layanan). Jadi, misalnya, Anda melihat desain mereka, Anda akan melihat mereka memiliki antarmuka CRUDRepository yang memperlihatkan metode untuk membuat, menghancurkan dan memulihkan entitas (antara lain). Ada juga PagingAndSortingRepository yang menambahkan fungsionalitas ekstra untuk itu, menyortir dan mem -paging hasil, dll, dll.
Jadi, kerangka kerja ini mungkin merupakan tempat yang baik untuk mempelajari desain repositori yang baik.
Sejauh yang saya tahu, banyak konsep yang diterapkan oleh Spring Data Framework, berasal dari sebuah buku hebat yang disebut Domain-Driven Design: Tackling Complexity di Jantung Perangkat Lunak , buku ini memiliki seluruh bagian yang didedikasikan untuk desain Repositori.
Anda dapat mempertimbangkan untuk mendapatkan salinannya.
Kutipan kecil dari buku ini menjelaskan:
sumber
Seharusnya tidak menyediakan antarmuka CRUD lurus atau logika bisnis. Ini memediasi antara logika bisnis dan database. Antarmuka harus dalam istilah logika bisnis tetapi tidak menjalankan logika bisnis itu sendiri, lebih seperti logika bisnis primitif. Sebagai contoh katakanlah Anda akan membangun sistem email, Anda memiliki pengguna dan pesan. Repositori Anda akan memberikan operasi CRUD dasar untuk pengguna dan pesan tetapi juga akan memberikan tampilan pesan yang disaring seperti GetUsersNewMessages (pengguna) atau GetSearchedMessages (pengguna, searchTerm).
Idenya adalah Repositori menyembunyikan bagaimana penyimpanan diimplementasikan dan menyediakan antarmuka yang bersih yang memungkinkan akses cepat dan fleksibel ke data. Menjaga operasi dalam tingkat tinggi tentang apa yang harus terjadi daripada bagaimana Anda memiliki lebih banyak fleksibilitas untuk mengimplementasikannya dengan cara apa pun yang terbaik untuk toko dukungan yang mendasarinya.
sumber