Neredeyse her durumda, birincil anahtarlar işletme alan adınızın bir parçası değildir. Elbette, benzersiz endekslere sahip, kullanıcılara yönelik bazı önemli nesnelere sahip olabilirsiniz ( UserName
kullanıcılar veya OrderNumber
siparişler için), ancak çoğu durumda, etki alanı nesnelerini tek bir değer veya değer grubuyla açıkça tanımlamak gerekmez ; yönetici kullanıcı. Bu istisnai durumlarda bile, özellikle global benzersiz tanımlayıcıları (GUID) kullanıyorsanız, birincil anahtarın kendisini göstermek yerine alternatif bir anahtar kullanmak isteyeceksiniz veya kullanmak isteyeceksiniz.
Bu nedenle, etki alanı odaklı tasarım anlayışım doğruysa, birincil anahtarların açığa çıkması gerekmez ve bu nedenle açıklığa kavuşturulmamalıdır. Çirkin ve stilimi bozuyorlar. Ancak, etki alanı modeline birincil anahtarlar eklememeyi seçersek, bunun sonuçları vardır:
- Doğal olarak, yalnızca etki alanı modellerinin kombinasyonlarından türetilen veri aktarma nesneleri (DTO) birincil anahtarlara sahip olmayacaktır.
- Gelen DTO'ların birincil anahtarı olmayacak
Öyleyse, gerçekten saf kalacaksanız ve etki alanı modelinizdeki birincil anahtarları elimine edecekseniz, her isteği bu birincil anahtardaki benzersiz dizinler açısından ele almaya hazır olmanız gerektiğini söylemek güvenli midir?
Başka bir deyişle, aşağıdaki çözümlerden hangisi etki alanı modellerinde PK kaldırıldıktan sonra belirli nesneleri tanımlamakla başa çıkmak için doğru yaklaşımdır?
- Diğer özelliklerle uğraşmanız gereken nesneleri tanımlayabilmek
- Birincil anahtarı DTO'ya geri alma; yani, kalıcılıktan etki alanına eşleme yaparken PK'nin elimine edilmesi, ardından etki alanından DTO'ya eşleme yaparken PK'nin yeniden birleştirilmesi?
EDIT: Bu somut yapalım.
Alan adı modelidir Say VoIPProvider
gibi alanları içeren Name
, Description
, URL
, referanslar gibi yanı sıra ProviderType
, PhysicalAddress
ve Transactions
.
Şimdi ayrıcalıklı kullanıcıların yönetimi yönetmesine izin verecek bir web servisi oluşturmak istediğimi VoIPProvider
varsayalım.
Belki de kullanıcı dostu bir kimlik bu durumda işe yaramaz; Sonuçta, VoIP sağlayıcıları, isimleri bilgisayar anlamında ve hatta insani nedenlerden dolayı, ticari nedenlerden dolayı yeterince belirgin olan şirketlerdir. Bu nedenle, benzersiz VoIPProvider
olanın tamamen belirlendiğini söylemek yeterli olabilir (Name, URL)
. Şimdi PUT api/providers/voip
ayrıcalıklı kullanıcıların VoIP
sağlayıcıları güncelleyebilmesi için bir yönteme ihtiyacım olduğunu varsayalım . Potansiyel olarak bazı düzleştirmeler de dahil olmak üzere VoIPProviderDTO
, alanların birçoğunun tamamını içermeyen bir alan gönderir VoIPProvider
. Ancak, onların akıllarını okuyamıyorum ve hala hangi sağlayıcıdan bahsettiğimizi söylemeleri gerekiyor.
2 (belki 3) seçeneğim var gibi görünüyor:
- Etki alanı modelime bir birincil anahtar veya alternatif anahtar ekleyin ve bunu DTO’ya gönderin;
- Değer verdiğimiz sağlayıcıyı benzersiz dizin aracılığıyla belirle
(Name, Url)
- Kalıcılık katmanı, etki alanı ve DTO arasında her zaman kalıcılık katmanı ile ilgili uygulama ayrıntılarını göstermeyecek şekilde eşleştirilebilecek bir tür ara nesne tanıtın;