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:
Pola REPOSITORY adalah kerangka kerja konseptual sederhana untuk merangkum solusi-solusi tersebut dan mengembalikan fokus model kami.
REPOSITORY mewakili semua objek dari jenis tertentu sebagai set konseptual (biasanya ditiru). Kerjanya seperti koleksi, kecuali dengan kemampuan kueri yang lebih rumit. Objek dengan tipe yang sesuai ditambahkan dan dihapus, dan mesin di belakang REPOSITORY memasukkannya atau menghapusnya dari database. Definisi ini mengumpulkan seperangkat tanggung jawab yang kohesif untuk menyediakan akses ke akar AGREGAT dari siklus kehidupan awal hingga akhir.
Klien meminta objek dari REPOSITORY menggunakan metode kueri yang memilih objek berdasarkan kriteria yang ditentukan oleh klien, biasanya nilai atribut tertentu. REPOSITORY mengambil objek yang diminta, merangkum mesin query database dan pemetaan metadata. REPOSITORI dapat mengimplementasikan berbagai kueri yang memilih objek berdasarkan kriteria apa pun yang dibutuhkan klien. Mereka juga dapat mengembalikan informasi ringkasan, seperti hitungan berapa banyak instance yang memenuhi beberapa kriteria. Mereka bahkan dapat mengembalikan perhitungan ringkasan, seperti total di semua objek yang cocok dari beberapa atribut numerik.
REPOSITORY mengangkat beban yang sangat besar dari klien, yang sekarang dapat berbicara dengan antarmuka yang sederhana dan mengungkap maksud, dan menanyakan apa yang dibutuhkan dalam hal model. Untuk mendukung semua ini membutuhkan banyak infrastruktur teknis yang kompleks, tetapi antarmuka yang sederhana dan terhubung secara konseptual ke model domain.
Karena itu:
Untuk setiap jenis objek yang membutuhkan akses global, buat sebuah objek yang dapat memberikan ilusi koleksi semua-jenis dari memori dalam memori. Atur akses melalui antarmuka global yang terkenal.
Berikan metode untuk menambah dan menghapus objek, yang akan merangkum penyisipan aktual atau penghapusan data di penyimpanan data. Memberikan metode yang memilih objek berdasarkan beberapa kriteria dan mengembalikan objek yang sepenuhnya instantiated atau koleksi objek yang nilai atributnya memenuhi kriteria, sehingga merangkum teknologi penyimpanan dan permintaan yang sebenarnya. Berikan REPOSITORI hanya untuk akar AGGREGATE yang sebenarnya membutuhkan akses langsung. Biarkan klien fokus pada model, mendelegasikan semua penyimpanan objek dan akses ke REPOSITORI.