Email("a@b.com") örneği eşittir; çünkü onları ayıran bir kimlik yoktur — yalnızca değerleri vardır.
VO’lar domain modelinde iki kritik iş görür:
- Geçersiz durumu temsil edilemez kılar.
Emailnesnesi varsa, o e-posta zaten regex’ten geçmiştir. Aggregate içinde tekrar doğrulamaya gerek yoktur. - Anlam taşır.
string phoneyerinePhone; ham veri değil, kuralları kendi içinde taşıyan bir kavram.
Tasarım: değişmezlik + ctor validasyonu
Tüm VO’larValueObject tabanından türer ve şu deseni izler:
- Doğrulama constructor’da (veya statik fabrika metodunda) yapılır; ihlalde
DomainExceptionfırlatılır. - Alanlar
get-only’dir; nesne oluştuktan sonra değişmez. GetAtomicValues()eşitliğe katkıda bulunan alanları sıralar.- EF Core materializasyonu için
protectedparametresiz ctor bulunur.
public ctor yerine statik fabrika metodu kullanır (özellikle üretim/hash gibi yan etki içerenler):
VO kataloğu
SharedKernel/ValueObjects/ altındaki başlıca value object’ler:
Telefon — NetGSM formatı
Refresh token — düz değer asla saklanmaz
EF Core ile eşleme — kısaca
Value object’ler ayrı tablo değil, sahibi olan entity’nin kolonlarına açılır. EF Core’da bu,HasConversion (tek değerli VO için) veya ComplexProperty/OwnsOne (çok alanlı VO için) ile yapılır:
Eşleme detayları (hangi VO
HasConversion, hangisi owned type olarak çıkarılıyor) Veri Katmanı dokümanındadır. Domain tarafı persistence’tan habersizdir — VO’lar EF Core’a göre değil, iş kuralına göre tasarlanır.Enumeration örnekleri
Sabit kümelerenum yerine Enumeration ile modellenir (bkz. SharedKernel). Kimlik doğrulama ve yetkilendirmede sık kullanılanlar:
Sonraki adımlar
Aggregate'ler
VO’ların
User ve diğer aggregate’lerde kullanımı.SharedKernel
ValueObject ve Enumeration taban sınıfları.Veri Katmanı
VO → kolon eşlemesi ve
HasConversion detayları.Domain Event'ler
VO’ları payload olarak taşıyan event’ler.