DDD: Etki alanı olay işleyicileri nereye yerleştirilir?


13

DDD'ye etki alanı olay işleyicileri yerleştirmek için hangi katmanın doğru katman olduğunu söyleyebilir misiniz? Örneğin, yeni bir sözleşme eklemek için başvuru hizmetim var ve sözleşme eklendikten sonra ilgili kişiye e-posta bildirimi göndermek istiyorum; başka bir şey?

Yanıtlar:


12

Etki alanı olay işleyicilerini uygulama katmanına yerleştiriyorum.

Etki alanı etkinliği, dış katmanlara (veya dış dünyaya) etki alanı katmanında bir şey olduğunu söylemenin bir yoludur. Etkinlikle ne yapılacağı uygulamaya bağlıdır. Uygulama kullanıcıyı değişiklikler hakkında bilgilendirebilir veya başka bir etki alanını bir şey yapması için çağırabilir. Uygulama, kullanıcı eylemlerine, web isteklerine veya etki alanı olaylarına tepki olarak etki alanı işlemlerini düzenlemekten sorumludur.


1
Uygulama katmanı için +1. Bir pub-sub tasarımında, domain olayı farklı yerlerde / sistemlerde / mikro hizmetlerde genel mantığı etkinleştirebilir. Abonelerden biri DDD kullanılarak modellenmiş bir uygulama ise, olay o uygulamada / BC'de bazı işlemleri tetikler. Bu işlem, tipik olarak uygulama katmanında gerçekleştirilen işlem sınırlaması, erişim kontrolü, koordinasyon gerektirebilir.
Paulo Merson

2

Orijinal DDD kitabı (Evans 2004) uygulama katmanını, kullanıcının eylemine yanıt olarak etki alanı nesnelerini kullanan ince bir katman olarak açıklar. Etki alanı olayları için tipik olay işleyicileri bu nedenle uygulama katmanına ait değildir.

Yukarı doğru bir bağımlılık oluşturarak katmanı kırmazsanız, bazılarını alan katmanına yerleştirmek mantıklı olabilir.

Etki alanı katmanının altında bir altyapı katmanınız varsa, olay işleyicisi katmanı kıracağından orada olamaz.

Etki alanı katmanının üstünde bir bağdaştırıcı katmanınız varsa, orada bir olay işleyicisi oluşturabilirsiniz. Altıgen mimariye göz atın .


2

Etki Alanı arabirimi olarak Etki Alanı Olay İşleyicileri Etki Alanı katmanına yerleştiriyorum IDomainEventHandler.

Etki Alanı Olay İşleyicisi örneği, yeni bir işlemi başlatmak için belirli bir etki alanı olayına abone olan bir ilkedir (örneğin: yeni bir etki alanı komutunu tetiklemek için), bu nedenle ilgili olduğu için Etki Alanı katmanında olması mantıklıdır iş mantığı.

Bir siparişin onaylandığı ve bu nedenle bir fatura talebinin yaratılması gereken bir örnek düşünebiliriz. Olan bir olayımız OrderConfirmedEventvar. Etki alanımızdaki bir politika, bu etkinliğe abone RequestInvoiceolmaktan ve komut işleyicisi tarafından işlenecek ve buna göre ele alınacak bir etki alanı komutu oluşturmaktan sorumlu olacaktır.

Uygulama katmanında bu olay işleyicimiz olsaydı, uygulama katmanının, kullanıcının eylemlerini düzenlemeye ek olarak, yanlış görünen bazı iş mantığı yürüteceği anlamına gelir.

Ancak biz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.