Saya mencoba mempelajari cara-cara DDD dan mata pelajaran terkait. Saya datang dengan ide konteks terbatas sederhana untuk menerapkan "bank": ada akun, uang dapat disimpan, ditarik dan ditransfer di antara mereka. Penting juga untuk menyimpan sejarah perubahan.
Saya mengidentifikasi entitas Akun dan sumber acara akan lebih baik untuk melacak perubahan di dalamnya. Entitas atau objek nilai lain tidak relevan dengan masalah, jadi saya tidak akan menyebutkannya.
Ketika mempertimbangkan setoran dan penarikan - ini relatif sederhana, karena hanya ada satu agregat yang dimodifikasi.
Ketika mentransfernya berbeda - dua agregat harus dimodifikasi oleh satu peristiwa MoneyTransferred . DDD tidak lagi memodifikasi beberapa agregat dalam satu transaksi. Di sisi lain aturan sumber acara adalah untuk menerapkan acara ke entitas dan memodifikasi negara berdasarkan mereka. Jika acara dapat disimpan hanya dalam database, tidak akan ada masalah. Tetapi untuk mencegah modifikasi bersamaan dari event yang bersumber dari entitas, kita harus mengimplementasikan sesuatu yang mengubah aliran acara dari setiap agregat (untuk menjaga batas transaksi mereka). Dengan versi muncul masalah lain - saya tidak bisa menggunakan struktur sederhana untuk menyimpan acara dan membacanya kembali untuk menerapkannya ke agregat.
Pertanyaan saya adalah - bagaimana saya bisa menggabungkan ketiga prinsip: "satu agregat satu transaksi", "peristiwa-> perubahan agregat" dan "pencegahan modifikasi bersamaan"?