Saya masuk ke Domain Driven Design dan beberapa konsep yang saya temui sangat masuk akal, tetapi ketika saya memikirkannya lebih banyak, saya harus bertanya-tanya apakah itu benar-benar ide yang bagus.
Konsep Agregat, misalnya masuk akal. Anda membuat domain kepemilikan kecil sehingga Anda tidak harus berurusan dengan seluruh model domain.
Namun, ketika saya memikirkan hal ini dalam konteks aplikasi web, kita sering menekan basis data untuk menarik sebagian kecil bagian data. Misalnya, sebuah halaman hanya dapat mencantumkan jumlah pesanan, dengan tautan untuk mengklik untuk membuka pesanan dan melihat nomor pesanannya.
Jika aku pemahaman Agregat benar, saya biasanya akan menggunakan pola repositori untuk mengembalikan OrderAggregate yang akan berisi para anggota GetAll
, GetByID
, Delete
, dan Save
. Ok, kedengarannya bagus. Tapi...
Jika saya memanggil GetAll untuk mendaftar semua pesanan saya, tampaknya bagi saya bahwa pola ini akan membutuhkan seluruh daftar informasi agregat untuk dikembalikan, menyelesaikan pesanan, memesan baris, dll ... Ketika saya hanya memerlukan sebagian kecil dari informasi itu (hanya informasi tajuk).
Apakah saya melewatkan sesuatu? Atau ada beberapa tingkat optimasi yang akan Anda gunakan di sini? Saya tidak dapat membayangkan bahwa seseorang akan menganjurkan mengembalikan seluruh agregat informasi ketika Anda tidak membutuhkannya.
Tentu saja, orang bisa membuat metode seperti repositori Anda GetOrderHeaders
, tetapi itu tampaknya mengalahkan tujuan menggunakan pola seperti repositori.
Adakah yang bisa menjelaskan ini untuk saya?
EDIT:
Setelah penelitian lebih lanjut, saya pikir pemutusan di sini adalah bahwa pola Repositori murni berbeda dari apa yang kebanyakan orang pikirkan tentang Repositori.
Fowler mendefinisikan repositori sebagai penyimpan data yang menggunakan semantik koleksi, dan umumnya disimpan dalam memori. Ini berarti membuat grafik seluruh objek.
Evans mengubah Repositori untuk memasukkan Agregat Roots, dan repositori diamputasi untuk hanya mendukung objek dalam Agregat.
Kebanyakan orang tampaknya menganggap repositori sebagai Objek Akses Data yang dimuliakan, di mana Anda hanya membuat metode untuk mendapatkan data apa pun yang Anda inginkan. Itu tampaknya tidak menjadi maksud seperti yang dijelaskan dalam Pola Arsitektur Aplikasi Perusahaan Fowler.
Yang lain lagi menganggap repositori sebagai abstraksi sederhana yang digunakan terutama untuk membuat pengujian dan ejekan lebih mudah, atau untuk memisahkan kegigihan dari sisa sistem.
Saya kira jawabannya adalah bahwa ini adalah konsep yang jauh lebih kompleks daripada yang saya pikirkan sebelumnya.