Etki Alanı Etkinliği kullanmak veya uygulama katmanının her şeyi düzenlemesine izin vermek arasında nasıl seçim yapılır


27

İlk adımımı etki alanı odaklı tasarıma koyuyorum, mavi kitabı ve hepsini aldım ve kendimi belirli bir çözümü uygulamak için üç yol görüyorum. Kayıt için: CQRS veya Event Sourcing kullanmıyorum.

Diyelim ki bir kullanıcı isteği uygulama servis katmanına giriyor. Bu isteğin iş mantığı (herhangi bir nedenden ötürü) varlık üzerindeki bir yönteme ve etki alanı hizmetindeki bir yönteme ayrılmıştır. Bu yöntemleri nasıl arayabilirim?

Şimdiye kadar topladığım seçenekler:

  • Uygulama servisinin her iki yöntemi de aramasına izin verin.
  • Etki alanı hizmetini işletmeye enjekte etmek için var olan şeyi yapmasına izin vermek için etki alanı hizmetini enjekte etmek için yöntem enjeksiyonu / çift gönderme yöntemini kullanın ve ardından etki alanı hizmetinin yöntemini (veya etki alanı hizmetinin varlık üzerinde yöntemi çağırmasına izin verin) çağırmasını sağlayın
  • Varlık yönteminde, etkileyiciyi etki alanı hizmetini çağıran bir etki alanı etkinliği oluşturun. (Bahsettiğim etki alanı etkinliklerinin türü: http://www.udidahan.com/2009/06/14/domain-events-salvation/ )

Bunların hepsinin uygulanabilir olduğunu düşünüyorum ama aralarında seçim yapamıyorum. Uzun zamandır bunu düşünüyordum ve üç arasındaki anlamsal farkları artık göremediğim bir noktaya geldim. Ne zaman ne kullanılacağına dair bazı yönergeler biliyor musunuz?


1
etki alanı olaylarıyla ilgili bilgilere ilginç bağlantı için teşekkür ederiz.
JW01

Bu iki yöntem de belirli bir sırada mı çağrılmalıdır?
SpaceTrucker

@ SpaceTrucker Özel durumumda gerçekten önemli değil. Ancak kendimden bahsettiğim seçeneklerin her birinde, isterse yöntemlerin yürütülmesini sipariş etmek mümkün.
dvdvorle

Yanıtlar:


19

Uygulama servisinin her iki yöntemi de aramasına izin verin.

Uygulama hizmeti genellikle bunun için harika bir başlangıç ​​noktasıdır, ancak davranışı her zaman işletmeye mümkün olduğunca yaklaştırmaya çalışmalısınız. Uygulama servisi bir düzenleme rolü oynar ve etki alanı davranışını yürütme aşamasını kurar ve gerekli tüm bağımlılıkları sağlar. Ancak, mümkün olduğunda, davranışını etki alanı modeline devretmelidir.

Etki alanı hizmetini işletmeye enjekte etmek için var olan şeyi yapmasına izin vermek için etki alanı hizmetini enjekte etmek için yöntem enjeksiyonu / çift gönderme yöntemini kullanın ve ardından etki alanı hizmetinin yöntemini (veya etki alanı hizmetinin varlık üzerinde yöntemi çağırmasına izin verin) çağırmasını sağlayın

Bu daha iyi bir yaklaşımdır çünkü davranışların çoğu varlık veya etki alanı servisine verilir. Bunu gerçekleştirmenin en ayrık yolu, bir varlığın bir servise bağımlılığını ifade etmesi, eldeki davranışı sağlayan yöntemin bir parametresidir.

Varlık yönteminde, etki alanı hizmetini çağıran bir işleyici olarak bir etki alanı etkinliği oluşturun.

Udi ve ayrıca Evans'ın da açıkladığı gibi etki alanı olay deseni çok yönlüdür ve çeşitli senaryolarda uygulanabilir. Bununla birlikte, bununla birlikte gelen birkaç komplikasyon var. İlk olarak, etki alanı etkinliği yayıncısında uygun kapsamın bulunduğundan emin olmalısınız. Etki alanı olay işleyicilerinizin çoğu zaman bağımlılıkları olur ve bir IoC kabı kullanıyorsanız, uygun örneklerin enjekte edildiğinden emin olmanız gerekir. Örneğin, bir web uygulamasında[ThreadStatic]nitelik, kapsam belirleme için sorunludur. Diğer bir karmaşıklık, transkripsiyonel sınırlarınkidir. Bir işlemi bir etki alanı etkinliği yükseltirse, ancak veritabanını izleyen bir işlem başarısız olursa, tüm etki alanı etkinliği işleyicilerinin geri alma yoluna ihtiyacı olacaksa, aksi takdirde geçersiz bir etkinlik gerçekleştirmeye başlayacaksınız. Bununla birlikte, bu tabanları ele geçirdiyseniz, etki alanı olayları, varlıkların kendi alanlarındaki etki alanı mantığını içine almak için harika bir kalıptır.

Yaklaşım 2 ve 3 arasındaki fark, kullanım durumuna bağlıdır. Bir etki alanı olayı , geçmiş zamandaki bir olaya yanıt olarak ek davranışlar çağırmak istediğinizde uygulanır . Etki alanı olay işleyicisi varlığın davranışını etkileyemediğinden bu önemli bir kısıtlamadır. Öte yandan, yaklaşım 2 ile, enjekte edilen hizmet bu davranışı etkileme potansiyeline sahiptir çünkü bu özel davranış için bir bağımlılık ilan edilir.

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.