Saya memulai dengan DDD dan memahami bahwa akar agregat digunakan untuk memastikan konsistensi transnasional. Kita tidak boleh memodifikasi beberapa agregat dalam satu layanan aplikasi.
Namun saya ingin tahu bagaimana menghadapi situasi berikut.
Saya memiliki akar agregat yang disebut Produk.
Ada juga root agregat yang disebut Group.
Keduanya memiliki ID, dan dapat diedit secara mandiri.
Banyak Produk dapat mengarah ke Grup yang sama.
Saya memiliki layanan aplikasi yang dapat mengubah grup produk:
ProductService.ChangeProductGroup(string productId, string groupId)
- Grup cek ada
- Dapatkan produk dari repositori
- Atur grupnya
- Tulis produk kembali ke repositori
Saya juga memiliki layanan aplikasi tempat grup dapat dihapus:
GroupService.DeleteGroup(string groupId)
1. Dapatkan produk dari repositori yang groupIdnya disetel ke groupId yang disediakan, pastikan penghitungannya 0 atau batal 2. Hapus grup dari repositori grup 3. Simpan perubahan
Pertanyaan saya adalah skenario berikut, apa yang akan terjadi jika:
Di ProductService.ChangeProductGroup, kami memeriksa grup yang ada (memang ada), lalu tepat setelah pemeriksaan ini pengguna yang terpisah menghapus productGroup (melalui GroupService.DeleteGroup lainnya). Dalam hal ini kami menetapkan referensi ke produk yang baru saja dihapus?
Apakah ini cacat dalam desain saya karena saya harus menggunakan desain domain yang berbeda (menambahkan elemen tambahan jika perlu), atau apakah saya harus menggunakan transaksi?