Bisakah Anda memberi tahu saya pendapat Anda bahwa lapisan mana yang tepat untuk menempatkan penangan peristiwa domain di DDD? Misalnya, saya memiliki layanan aplikasi untuk menambahkan kontrak baru dan saya ingin mengirim pemberitahuan email kepada orang yang dapat dihubungi, ketika kontrak telah ditambahkan, begitu juga dengan layanan aplikasi atau layanan domain pengirim email (yang menangani acara ContractAdded) atau sesuatu yang lain?
13
Buku DDD asli (Evans 2004) menjelaskan lapisan aplikasi sebagai lapisan tipis yang melatih objek domain sebagai respons terhadap tindakan pengguna. Oleh karena itu pengendali kejadian khusus untuk acara domain tidak termasuk dalam lapisan aplikasi.
Mungkin masuk akal untuk menempatkan beberapa dari mereka di lapisan domain, selama Anda tidak melanggar layering dengan menciptakan ketergantungan ke atas.
Jika Anda memiliki lapisan infrastruktur yang berada di bawah lapisan domain, pengendali acara tidak dapat berada di sana karena akan merusak lapisan tersebut.
Jika Anda memiliki lapisan adaptor yang berada di atas lapisan domain, Anda dapat membuat pengendali acara di sana. Lihat arsitektur Hexagonal .
sumber
Saya menempatkan Penangan Kejadian Domain di lapisan Domain sebagai antarmuka domain
IDomainEventHandler
.Contoh dari pengendali acara domain adalah kebijakan yang berlangganan acara domain tertentu untuk menginisialisasi transaksi baru (misalnya: untuk memicu perintah domain baru), oleh karena itu masuk akal untuk memilikinya di lapisan Domain karena itu terkait dengan logika bisnis.
Kami dapat memikirkan contoh di mana pesanan dikonfirmasi dan oleh karena itu permintaan faktur harus dibuat. Kami memiliki peristiwa
OrderConfirmedEvent
yang telah terjadi. Kebijakan di domain kami akan bertanggung jawab untuk berlangganan acara ini dan membuat perintah domainRequestInvoice
yang akan ditangani oleh penangan perintah dan ditangani sesuai dengan itu.Jika kita memiliki event handler ini di lapisan aplikasi, itu berarti lapisan aplikasi, selain mengatur tindakan pengguna, akan menjalankan beberapa logika bisnis, yang tampaknya tidak benar.
Bagaimanapun kita punya
sumber