Şirketleri takip eden bir sistem kuruyorsunuz. Bu şirketlerin Rehberleri var. Bu kişiler genellikle Faturalandırma / Ödeme, Satış, Sipariş ve Müşteri Desteği gibi belirli soruları yanıtlayan uzmanlardır.
Etki Alanına Dayalı Tasarım ve Soğan Mimarisini kullanarak, bunu aşağıdaki türlerle modelledim:
- şirket
- Kişileri Var
- İletişim
- İletişim Türleri Var
- ContactType (numaralandırma)
- CompanyRoository (arayüz)
- EFCompanyRepository (harici bir montajda tanımlanır, EntityFramework kullanır, CompanyRepository uygular)
Ekibimiz bu uygulama için veritabanının nasıl modelleneceği konusunda bölünmüş bir görüşe sahiptir.
A Tarafı: Yalın DDDers:
- Bir Kişi için hangi Kişi Tiplerinin geçerli olduğunu tanımlamak, Etki Alanının görevidir. Bilinmeyen ContactTypes'in kaydedilmediğini doğrulamak için veritabanına bir tablo eklemek sızdıran bir alanın işaretidir. Mantık çok uzaklara yayılıyor.
- Veritabanına ve ilgili koda statik bir tablo eklemek israftır. Bu uygulamada veritabanı bir sorunu çözer: şey devam ve bana geri vermek. Fazladan bir tablo ve karşılık gelen CRUD kodu yazmak israftır.
- Kalıcılık stratejisini değiştirmek mümkün olduğunca kolay olmalıdır. Bu iş kurallarını değiştirme olasılığı daha yüksektir. SQL Server'ın çok pahalı olduğuna karar verirsem, şemamda yaptığım tüm doğrulamayı yeniden oluşturmak istemiyorum.
B Tarafı: Gelenekçiler [bu muhtemelen adil bir isim değildir. DBCentristler?]:
- Veritabanında kod okumadan anlamlı olmayan verilerin olması kötü bir fikirdir. Raporlar ve diğer tüketiciler değer listesini kendileri tekrar etmek zorundadır.
- İsteğe bağlı olarak db tipi sözlüklerinizi yüklemek için bu kadar kod değil. Endişelenme.
- Bunun kaynağı kod değil veri ise, değiştiğinde basit bir SQL betiği yerine bit dağıtmak zorunda kalacağım.
Her iki taraf da doğru ya da yanlış değildir, ancak bunlardan biri uzun vadede muhtemelen daha verimlidir, ilk geliştirme, hatalar, vb. İçin geliştirme süresini sayar. Hangi taraf - ya da daha iyi bir uzlaşma var mı? Bu kod tarzını yazan diğer takımlar ne yapar?