DDD'de, bir Etki Alanı Hizmeti temelde yalnızca bir Cephe ve / veya Arabulucu Kalıbı mıdır?


13

Etki Alanına Dayalı Tasarım'da Etki Alanı Katmanı'nın birden fazla (geleneksel) hizmeti olabilir. Örneğin, Kullanıcı etki alanı için şunlara sahip olabiliriz:

  • Kullanıcı nesnelerini farklı şekillerde oluşturan bir UserFactory
  • Altyapı Katmanındaki Kalıcılık Hizmetleri ile etkileşime girmekten sorumlu bir UserRepository

Etki Alanı Katmanı'ndaki bir UserService, yalnızca bu iki hizmet ve Altyapı Katmanı için bir Arabulucu ve / veya Cephe midir yoksa daha fazlası var mı?



Seviye Gorodinski'nin yayınlarını çok okudum, ikinci bağlantıyı hiç görmedim. Büyük okumak, kesinlikle bazı önemli noktalara dokunur!
e_i_pi

Yanıtlar:


11

Domain services en iyi olmadıkları şeyle tanımlanırlar:

  • onlar ne EntitiesneAggregate roots
  • onlar değil Value objects
  • yalnızca bir Entity veya bir tanesine doğal olarak sığmayan alan bilgisi Value object

A örneği : Domain servicea Saga/Process manager: Farklıdan Aggregate rootsmümkün olan çoklu içeren uzun süren bir süreci koordine eder Bounded contexts.

Varlık dedi ki, neyi bir Domain serviceve nasıl uygulandığı iki ortogonal şeylerdir.

Etki Alanı Katmanı'ndaki bir UserService, yalnızca bu iki hizmet ve Altyapı Katmanı için bir Arabulucu ve / veya Cephe midir yoksa daha fazlası var mı?

Bazı bir gibi alan hizmetleri UserRepository(tanımlanmış bir arayüz meydana Domain layerve bir beton uygulaması Infrastructure layer) olabilir kullanılarak uygulanabilir Facadetasarım deseni. Diğer alan adı hizmetleri değildir.

Diğer katmanlara (ve SOLID'e ) bağlı olmaması gereken önemli kural dışında, bunların nasıl uygulanacağı konusunda zor bir kural yoktur .Domain layer


Teşekkür ederim, sanırım sonunda Alan Katmanı anladım. Veri nesnelerini (Toplamalar, Varlıklar ve Değer Nesneleri) tutmanın yanı sıra, iş kurallarını da içerir - ancak bu kuralların somut bir şekilde uygulanması değildir. Etki Alanı Hizmetleri, Etki Alanı veri nesnelerine neler yapabileceğinizi tanımlar, ancak bu işlemlerin dahili olarak nasıl çalıştığı hakkında hiçbir bilgiye sahip değildir.
e_i_pi

1
@e_i_pi iş kuralları yalnızca Agregalar ve iç içe geçmiş varlıkları tarafından korunur. Alan adı hizmetleri buna dahil değildir.
Constantin Galbenu

1
@e_i_pi burada işlem birden fazla Toplama içerir. Örneğin, bir Kişinin (başka bir Toplam) BankAccounts (Toplamlar) listesi göz önüne alındığında, bir alan adı hizmeti bu hesapların toplam bakiyesini hesaplar.
Constantin Galbenu

1
@e_i_pi: Sanırım birkaç yanlış anlama var. Dolayısıyla, Alan Katmanı'nın tamamı alan adınızın bir yazılım modelidir. "Veri nesnelerini (Toplamalar, Varlıklar ve Değer Nesneleri) tutmanın yanı sıra" - bunlar sadece verileri tuttukları anlamıyla "veri nesneleri" değildir; bunlar aslında etki alanı kurallarını uygular, davranışı tanımlar. Şimdi, E. Evans'ın DDD Kitabına göre Etki Alanı Hizmetleri , etki alanının bir nesneye (varlık veya değer nesnesi) doğal olarak uymayan yönleridir .
Filip Milovanović

1
Bunun yerine, bir Etki Alanı Hizmeti "yalnızca bir istemci için neler yapabileceği açısından tanımlanır", etki alanı modelinin diğer öğeleri açısından tanımlanır (böylece bu öğeleri bir şekilde düzenler ve bu düzenlemeyi yöneten etki alanı kurallarını uygular). Etki alanı hizmetinin kendisi vatansızdır. Ayrıca, daha üst düzey bir katmanda bulunan ve temel olarak kullanıcı katmanlarını uygulayan veya etki alanlarını eşit bir şekilde kullanan uygulama hizmetleri kavramı da etki alanı katmanına bir arabirim görevi görüyor. Nesnelerin hizmetlere oranının modellenen etki alanına bağlı olarak değişeceğini unutmayın.
Filip Milovanović

1

Bağımlılığı Tersine Çevirme sonucunda DDD'deki hizmetleri görüyorum .

"Düz" bağımlılıklar kullanacaksanız, alan adı kodunuz, veritabanına veya harici hizmete veya bir tür diğer altyapı koduna bağlı bir varlık oluşturan bir varlığı veya fabrikayı kaydetmek veya sorgulamak için veritabanını çağırır.

Ancak alan kodu böyle olmamalı. Alan kodu, altyapı koduna bağlı olmamalıdır. Bu bağımlılık test etmeyi ve muhtemelen tekrar kullanmayı zorlaştırdığından. Bu yüzden bu bağımlılığı tersine çeviriyorsunuz. Altyapı kodunu alan koduna bağlı yaparsınız. Ve bunu yapmak için bir soyutlama getirmeniz gerekir. Etki alanı kodunun altyapı tarafından uygulanmasını beklediği davranışı tanımlayan bir soyutlama.

DDD'deki hizmetler de bu soyutlama. Çoğu durumda, etki alanı kodu için, bu hizmetler düz arabirimler olmalıdır. Ve uygulama, bu arayüzlere bağımlı olan altyapı kodunda olmalıdır.


Cevabınız için teşekkürler, her iki cevap birlikte bana "aha!" an. Cevabınız olmadan kavramı tamamen kavrayamazdım, ama Constantine'ın cevabını gelecekteki okuyuculara bir gösterge olarak tercih ediyorum.
e_i_pi
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.