Saya ingin menerapkan aplikasi pertama saya menggunakan pola CQRS bersama dengan Sumber Acara. Saya bertanya-tanya bagaimana pembuatan akar agregat harus ditangani dengan benar. Katakanlah seseorang mengirim perintah CreateItem. Bagaimana penanganannya? Di mana acara ItemCreated harus disimpan? Sebagai peristiwa pertama dari Item baru? Atau haruskah saya memiliki semacam entitas ItemList yang menggabungkan semua item dan daftar kejadiannya hanya terdiri dari peristiwa ItemCreated?
Udi Dahan menyarankan untuk tidak membuat akar agregat dan selalu menggunakan metode pengambilan. Tetapi bagaimana saya dapat mengambil sesuatu yang baru dan tentu saja tidak memiliki ID yang ditugaskan. Saya memahami ide di balik dan cukup masuk akal untuk berpikir bahwa objek baru adalah objek yang keadaannya terdiri dari nol peristiwa yang dijawab. Tetapi bagaimana saya harus menggunakannya? Haruskah saya memiliki metode yang berbeda dalam Repositori saya suka getNewItem()
atau membuat get(id)
metode saya menerima Optional<ItemId>
sebagai gantinya?
Sunting: Setelah beberapa waktu penggalian, saya menemukan implementasi yang sangat menarik dari pola tersebut menggunakan aktor. Penulis bukannya membuat agregat, mengambilnya dari semacam repositori dengan UUID yang baru dibuat. Kelemahan dari pendekatan ini adalah ia memungkinkan untuk keadaan inkonsistensi sementara. Saya juga bertanya-tanya bagaimana saya bisa menerapkan delete
metode dengan pendekatan seperti itu. Cukup tambahkan acara Dihapus ke daftar acara agregat?