Saya menggunakan pendekatan seperti-DDD untuk modul greenfield dari aplikasi yang ada; itu bukan 100% DDD karena arsitektur tapi saya mencoba menggunakan beberapa konsep DDD. Saya memiliki konteks terbatas (saya pikir itu istilah yang tepat - saya masih belajar tentang DDD) yang terdiri dari dua Entitas: Conversation
dan Message
. Percakapan adalah root, karena Pesan tidak ada tanpa percakapan, dan semua pesan dalam sistem adalah bagian dari percakapan.
Saya memiliki ConversationRepository
kelas (walaupun sebenarnya lebih mirip Gateway, saya menggunakan istilah "Repositori") yang menemukan Percakapan dalam database; ketika menemukan Percakapan, ia juga membuat (melalui Pabrik) daftar pesan untuk Percakapan itu (diekspos sebagai properti). Ini tampaknya menjadi cara yang benar dalam menangani berbagai hal karena tampaknya tidak ada kebutuhan untuk kelas penuh MessageRepository
karena hanya ada ketika Percakapan diambil.
Namun, ketika datang untuk menyimpan Pesan, apakah ini tanggung jawab dari ConversationRepository, karena ini adalah akar agregat dari Pesan? Apa yang saya maksud adalah, haruskah saya memiliki metode tentang ConversationRepository yang disebut, katakanlah, AddMessage
yang mengambil pesan sebagai parameternya dan menyimpannya ke database? Atau haruskah saya memiliki repositori terpisah untuk menemukan / menyimpan Pesan? Hal yang logis tampaknya menjadi satu repositori per Entitas, tetapi saya juga pernah mendengar "Satu repositori per Konteks".
sumber
Anda bisa membuat ConversationService dan menyuntikkan IConversationRepository dan IMessageRepository dalam konstruktornya. Gunakan repositori untuk operasi CRUD sederhana, dan layanan untuk yang lainnya (caching, hemat logika, dll.)
sumber