[DDDD] Delta based dan Domain
Delta based change merupakan konsep utama
Pada pendekatan repository terdahulu adalah kita menyimpan object pada state yg terakhir ke data store. Pendekatan yg dilakukan oleh greg young adalah dia tidak melakukan hal tersebut tetapi menyimpan perubahan2 atau delta perubahan dari aggregate root tersebut.
Pada pendekatan repository yg terdahulu konsep perubahan tersebut pada domain object implicit. Kita hanya mengetahui state sekarang tanpa mengetahui apa2 saja yg telah terjadi pada object itu mulai dari dia di create.
Pada DDDD implicit konsep tersebut diubah jadi explicit dan merupakan bagian dari domain language/Ubiquitos Language.
Domain object interface
Domain object seperti yg sudah dikemukakan di atas bertanggung jawab untuk memberikan perubahannya. Domain object akan memiliki interface dengan salah satu kontraknya adalah untuk memberikan state changes nya. Jadi kita mungkin akan memiliki method pada supertype interface tersebut GetStateChanges().
GetStateChanges() pada domain object tidak hanya bertanggun jawab terhadap perubahan state yg terjadi padanya saja (aggregate root) tetapi juga perubahan yg terjadi pada anak2 nya. State changes tersebut kemudian akan digabungkan dan menjadi satu unit of work.
Bagaimana mekanisme dari aggregate root untuk mengumpulkan state changes dari children nya? Salah satu cara yang paling feasible dilakukan adalah kita mengunjungi satu persatu dari child nya dan mengambil state changes nya. Atau cara yang lain adalah dengan menerapakan prinsip publish and subscribe dimana aggregate root listen terhadap perubahan dari children nya.
Sangat menarik, cuma jika kamu bisa tunjukkan dalam bentuk code supaya lebih mudah faham, amat dihargai.
Saya masih cuba hendak memahami konsep DDDD ini dan seperti amat berat sekali.