Anda mungkin ingin menampilkan tingkat persediaan pada halaman web, atau Anda mungkin ingin menampilkan nomor edisi persediaan dalam stok (bayangkan inventaris Anda adalah buku, majalah, dll). Informasi ini berasal dari domain Inventaris.
Hal utama yang perlu diperhatikan pada saat ini adalah bahwa Anda berbicara tentang tampilan, yang mengatakan bahwa menggunakan data basi dapat diterima.
Karena itu, Anda tidak perlu berinteraksi dengan agregat (yang bertanggung jawab untuk mencegah perubahan dari pelanggaran invarian bisnis), tetapi dengan representasi salinan terbaru dari status agregat.
Jadi apa yang biasanya saya harapkan adalah menjalankan kueri terhadap Katalog Produk, dan satu lagi menjalankan terhadap Inventaris, dan sesuatu untuk menyusun keduanya menjadi DTO yang Anda butuhkan untuk mendukung tampilan.
Muat domain Produk dan agregat domain Inventaris?
Jadi itu dekat . Kami tidak perlu memuat agregat, karena kami tidak akan mengubah apa pun. Tetapi kita membutuhkan negara mereka; jadi kita bisa memuatnya. Yang mengatakan, saya biasanya berharap dua domain akan berjalan dalam proses yang berbeda. Karena itu, kami akan memanggil keduanya, bukan memuat keduanya.
Apakah Anda memegang beberapa properti pada entitas domain Produk Anda untuk nomor dalam stok, dan edisi dalam stok, dan kemudian menggunakan Acara Domain untuk memperbarui ini ketika entitas Inventaris diperbarui?
"Jangan menyeberangi sungai. Itu akan buruk."
Menggunakan peristiwa untuk mengoordinasikan informasi di seluruh konteks domain: ide bagus . Mendorong konsep yang termasuk dalam satu domain ke domain lain: kebalikan dari ide bagus, kecuali lebih dari itu.
Anda ingin menjaga domain tetap bersih. The aplikasi yang berinteraksi dengan domain, itu tidak begitu penting. Jadi misalnya, masuk akal untuk aplikasi Inventaris untuk memanggil layanan di aplikasi produk untuk menanyakan beberapa konsep spesifik produk untuk ditambahkan ke tampilan. Atau sebaliknya.
Saya tidak tahu alasan mengapa satu aplikasi perlu dibatasi untuk satu domain. Selama ada satu sumber kebenaran, Anda dapat mendistribusikan transaksi sesuka Anda.
Tapi hanya untuk memikirkan ini, dalam contoh di atas kita akan berakhir dengan berpotensi 2 tabel DB untuk katalog produk dan inventaris produk. Sekarang, apakah kita menggunakan pengidentifikasi yang sama karena ini adalah produk yang sama.
Itu akan menjadi cara yang mudah. Dalam istilah yang lebih besar, Anda menggunakan pengidentifikasi yang sama karena entitas dunia nyata adalah sama; dua konteks terikat yang berbeda memodelkan entitas itu secara berbeda, tetapi model itu bukanlah entitas dunia nyata.
Ketika itu tidak berhasil, maka Anda akan memerlukan beberapa permintaan untuk menjembatani kesenjangan. Saya pikir variasi paling umum dari ini adalah bahwa entitas yang lebih baru mempertahankan id dari entitas yang lebih tua. Anda akan melihat ini dalam satu BC juga: pelamar, ketika disetujui, menjadi klien. Ini adalah agregat yang berbeda (keadaan yang terkait dengan klien tunduk pada invarian yang berbeda dari pelamar); jadi jika lapisan kegigihan Anda menggunakan aliran acara, aliran untuk agregat baru akan membutuhkan pengidentifikasi yang berbeda. Jadi akan ada sedikit negara di suatu tempat yang mengatakan "pelamar ini menjadi klien ini".
Atau, dapatkah kita menggunakan 1 tabel dan 1 baris tabel untuk data dan hanya memetakan data yang relevan ke properti agregat?
YIKES! Tidak, jangan lakukan itu. Anda menambahkan pertentangan transaksi tanpa alasan bisnis untuk melakukannya.