DDD'de, doğrulama uygulaması mantığı veya etki alanı mantığı mı?


26

DDD kullanarak bir form modellediğimizi varsayalım; formun kendisiyle ilişkili belirli iş kuralları olabilir - belki öğrenci değilseniz bir gelir belirtmeniz ve evli olduğunuzu belirtmeniz durumunda çocuklarınızı listelemeniz gerekir. Ve bir ülke belirlediyseniz, geçerli bir ülke olmalıdır.

Bu tür bir doğrulama etki alanında veya uygulama katmanında mı yaşıyor? Düşündüğüm diğer bazı konular:

  • Laravel gibi bazı çerçeveler, bir istek denetleyiciye ulaşmadan önce girişi doğrulayabilen doğrulama kuralları sağlar. Doğrulama bu seviyede yapılırsa DDD'yi bozar mı?

  • Ülkenin geçerli olup olmadığını belirlemek gibi durumlar için, genellikle dünyadaki tüm ülkelerin bir veritabanı tablosunu sorgulayacağım. Ancak, DDD'de, bunun etki alanı katmanında (benim anladığım kadarıyla) yapılması muhtemeldir. Etki alanı katmanının DB'ye erişmesine izin veriliyor mu veya geçerli bir ülke belirlemek için SQL dışı bir arama kullanmalı mıyım?

  • Hem uygulamadaki girişi hem de etki alanı katmanını doğrulamak gerekli mi?


6
Sorunuz, her şeyi koymak için her zaman tek bir doğru yer olduğunu varsayarsınız. Yok.
Robert Harvey

1
@RobertHarvey ne diyor. Doğrulama, "uygulama" tarafından yapılan herhangi bir onaylamadan bağımsız olarak her zaman modelde yapılmalıdır (uygulamanın modelinin bir parçası değil mi?). "Uygulama" daki herhangi bir doğrulama, sadece modelin doğrulamasının bir tekrarı olmalıdır - UI'nin yanıt verebilirliğini arttırmak için veya sadece "girebileceğiniz" uygulama "mantığına (bu şekilde:" olduğu gibi) ait olmalıdır. .. ", fakat işletme onayını kabul ediyordum). Etki alanı doğrulaması için "uygulama" katmanına asla güvenmeyin, bilgileri gönderen müşteriniz olmayabilir ...
Marjan Venema

Yanıtlar:


29

Bu tür bir doğrulama etki alanında veya uygulama katmanında mı yaşıyor?

Uygulama. İstediğiniz sihirli arama terimi, yolsuzlukla mücadele katmanıdır.

Tipik olarak, başvurunuz tarafından alınan mesaj bir DTO tadı olacaktır. Yolsuzlukla mücadele katmanınız genellikle etki alanının tanıyacağı değer türleri oluşturur. Etki alanı modeline gönderilen gerçek komut, doğrulanmış değer türleri cinsinden ifade edilir.

Örnek: Bir DepositMoney komutu muhtemelen bir miktar ve bir para birimi türü içerebilir. DTO gösterimi muhtemelen miktarı bir tamsayı olarak ve para birimi kodunu bir dize olarak ifade eder. Yolsuzlukla mücadele katmanı, DTO'yu onaylanmış bir Miktarı (negatif olması gereken) ve doğrulanmış bir CurrencyCode (etki alanındaki desteklenen kodlardan biri olması gerekir) içerecek bir Depozito değeri türüne dönüştürür.

Komutu, etki alanı modelinin anladığı türlere başarıyla ayrıştırdıktan sonra, komut, etki alanında yürütülür; bu, yine de işin değişmezliğini ihlal ettiği gerekçesiyle komutu reddedebilir (hesap henüz mevcut değil, hesap engellenir, bu belirli hesabın o para birimini kullanmasına izin verilmez mi?

Başka bir deyişle, işletme geçerliliği yolsuzlukla mücadele katmanının girdileri doğrulamasından sonra etki alanı modelinde gerçekleşecek.

Doğrulama kurallarının uygulanması normalde ya değer türünün kurucusunda ya da değer türünü oluşturmak için kullanılan fabrika yönteminde yaşar. Temel olarak, nesnelerin yapılarını, geçerli olmalarını garanti altına alacak, mantığı tek bir yerde izole edecek ve işlem sınırlarında çalıştıracak şekilde kısıtlarsınız.


Neden cevap uygulama? Metninize göre, resmi doğrulama hem alanda hem de uygulamada yapılabilir ve ticari alanda sadece doğrulama yapılabilir.
inf3rno

@ inf3rno, çünkü sorular özellikle etki alanı ile ilgili olmayan bir formun doğrulanması hakkında soruluyordu
timetofly

1
Bu cevap hiç mantıklı değil. DDD'nin Yolsuzlukla Mücadele Katmanı, harici (başka bir sistemin) etki alanı modeline ve DDD tabanlı uygulamanızın etki alanı modeline çevirmek için yazdığınız ekstra koddur. Böyle bir harici sistem yoksa, Yolsuzlukla Mücadele katmanı yoktur. Ayrıca, iş kurallarının doğrulanması Uygulama katmanına değil, Alan Modeline (ve Alan katmanına) aittir. DTO'lara gelince, bu bir DDD uygulamasında bulunabilecek veya bulunmayabilecek teknik bir bileşendir (Uygulama katmanında). DTO'lar ile Varlıklar / ValueObject'ler arasında dönüştürme yapmanın Yolsuzlukla Mücadele katmanları ile ilgisi yoktur.
Rogério

5

Sorunlu etki alanı modeliniz, etki alanı iş kurallarınızı içerir. İş kuralları, modelin unsurları üzerindeki kısıtlardır. Asansörün kapı açıkken hareket etmediği, bozulabilen malların soğutulmamış bir kaba yüklenmediği ve iptal edilmiş bir siparişin gönderilmediği anlamına gelir.

Bu, etki alanınız insanlarla etkileşime girdiğinde (ekranlar, formlar vb.) Doğrulama veya yardım gerektirmediği anlamına gelmez. Sadece isteğe bağlı olduğunu fark et.

İki tür iş kuralı olduğunu düşünün: - bir nesnenin özelliklerini kısıtlayan özellik kuralları ve nesnelerin arasına işbirliğinin eklenmesini ve kaldırılmasını kısıtlayan işbirliği kuralları.

İş kuralları, programlama dilinizle ilgili mantık kurallarından farklıdır ve değerlerin sağlanıp sağlanmadığını kontrol edin.

Not: DDD'de formunuzu “modelleme” kavramı yoktur.


0

Belirli bir durum model varlıklarını geçersiz kılar mı? Eğer evet ise, o zaman model işletmenin bu duruma ulaşmasını engellemelidir. Bu, modelin kendini nasıl doğrulayacağını bilmesi gerektiği anlamına gelir.

Ancak küçük bir problem var: Model doğrulama genellikle çok geç oluyor. Genellikle erken doğrulama yapmak istiyoruz, bu nedenle kullanıcının çok fazla beklemesi gerekmez. Doğrulamanın genellikle uygulama mantığına girmesinin nedeni budur.

Doğrulama bağlamına gelince: Varlığın ek veri sorgulayabilmesi sorunu yoktur. Ancak bu verilerin nereden geldiği önemli olmamalıdır. SQL, File ya da sadece kodlanmış olması önemli değil. Depoların var olmasının nedeni budur. Etki alanı, ne tür bir sorguya ihtiyaç duyduğunu tanımlar ve başkalarının uygulamaya dikkat etmesini sağlar.


-2

Etki alanı katmanı, tüm doğrulama mantığını içermelidir. Sunum, yolsuzlukla mücadele katmanları veya diğer bağımlı katmanlar bunu yansıtmalıdır.

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.