Saya telah membaca tentang Desain Berbasis Domain selama hampir dua tahun dan telah dengan hati-hati memperkenalkan beberapa konsep dalam pekerjaan sehari-hari saya atau setidaknya membuat rencana untuk bagaimana hal-hal yang saya lakukan secara teratur dapat dilakukan dalam Desain Berbasis Domain.
Salah satu kesimpulan yang saya mulai datang terutama dalam menanggapi membaca lebih lanjut tentang Event Sourcing dan Segregasi Command Query Responsibility (CQRS) yang mungkin objek domain dimaksudkan untuk digunakan hanya untuk tujuan menulis. Untuk lebih jelas, tampaknya apa yang orang secara halus menyarankan dalam banyak dokumentasi yang saya baca bahwa objek domain bertanggung jawab untuk melakukan operasi / perhitungan, pengesahan domain sentris, dan kemudian ada terutama untuk menyediakan jalan menuju kegigihan melalui infrastruktur yang disediakan dalam implementasi Repositori. Walaupun saya sangat menyukai kenyataan bahwa ini dapat menyederhanakan model domain karena hal ini mengurangi tanggung jawab untuk mengekspos status.
Jika memang benar bahwa objek domain terutama untuk digunakan sebagai objek menulis saja maka itu menimbulkan beberapa pertanyaan bagi saya bahwa saya berharap seseorang dapat menjawab.
- Bagaimana seseorang melakukan tes unit pada objek yang memiliki setter, atau metode yang mengubah keadaan objek tetapi yang tidak memberikan antarmuka publik ke luar untuk membaca status dari seperti properti getter di C #? Apakah saya tetap bisa mengekspos keadaan hanya untuk tujuan membuat objek itu dapat diuji?
- Bagaimana seseorang menunjukkan kepada pengguna hasil perhitungan atau operasi yang dilakukan dalam domain tanpa harus bertahan dan kemudian menarik hasilnya dari toko tetap di luar konteks domain? Apakah saya tetap bisa mengekspos negara hanya untuk tujuan menunjukkan hasil.
Apakah aturan praktis bahwa satu-satunya pengambil properti (dapatkan pengakses) haruslah yang juga dapat ditulis dalam domain? Atau mengatakan secara berbeda apakah properti hanya baca harus menjadi satu-satunya hal yang harus dihindari karena mereka hanya ada untuk tujuan membaca dan dengan demikian tidak memainkan peran yang diperlukan dalam model domain yang sebenarnya?
Bahan terkait:
Tidak. CQRS dapat digunakan bersama DDD.
sumber
Tes unit model domain Anda harus memeriksa bahwa untuk setiap perintah yang dijalankan peristiwa domain yang benar dimunculkan. Perintah domain Anda dan acara yang diambil dapat diinterogasi untuk kondisi.
Anda juga dapat mengesampingkan
ToString()
perintah dan acara domain Anda untuk menyediakan pelaporan keadaan otomatis yang dapat dibaca manusia.Untuk menjawab pertanyaan kedua Anda, untuk menampilkan hasil perintah, Anda harus mengatur agar peristiwa domain 'dipublikasikan' ke model-baca Anda.
sumber