2016-04-04 25 views
0

Sorumu bildiğimden emin değilim ama açıklamaya çalışacağım.Veritabanındaki validasyon kurallarını kaydet

Bir etki alanı modelindeki her türün bir kural veya doğrulama (ya da her neyse) Stratejisi olacağı göz önünde bulundurulduğunda, bu doğrulayıcıların Veritabanında devam etmesi sorunu nedir? Örneğin

:

Ben somut doğrulayıcılarını

bir damnable yaklaşım mı

yönetmek için Hiyerarşi yaklaşımı Başına Tablo kullanacak

public Class Contract 
{ 
    ... 
    public ContractType Type {get;set;} 

    public bool Validate(){ 
     return Type.Validate(this); 
    } 
} 

public abstract class ContractType 
{ 
    public int Id{ get; set; } 
    public string Description{ get; set; } 

    public abstract bool Validate(Contract contract); 
} 

public Class PreSale : ContractType 
{ 
    public override bool Validate(Contract contract) 
    { 
     //here goes specific validation for PreSale 
    } 
} 

public Class HighRiskSale : ContractType 
{ 
    public override bool Validate(Contract contract) 
    { 
     //here goes specific validation for HighRiskSale 
    } 
} 

public Class AprovedSale : ContractType 
{ 
    public override bool Validate(Contract contract) 
    { 
     //here goes specific validation for AprovedSale 
    } 
} 

followning modeli vardır

?

Bunu yapmanın sorunları nelerdir?

duydum ki ana argümanı, sade bir yapıya sahip ve DI konteyner veya Servis Locator gelen kuralları almak gerektiğidir güncellenen, ama bir hizmet bulma aracı olmasının rahat değilim Domain Modelimde.

peşin

+0

Bu kurallardan kaç tane var ve bunların zaman içinde büyümesini nasıl bekliyorsunuz? – guillaume31

+0

Çok fazla kural yok, iş değişimlerine bağlı olacak. – Dummy

+0

Onları neden veritabanında saklamak istiyorsunuz? Üretimde kodun yeniden kodlanması bu günlerde kolaydır. Bunu önlemek için her gün yapmanız gerekir, ancak her birkaç ayda bir kuralı değiştirmek için yeniden yapılanmak tamamen kabul edilebilir. – guillaume31

cevap

0

Burada asıl soru, kuralları kimin sürdürdüğü. Kullanıcılar sözleşmeyi ve her bir sözleşme için geçerlilik kurallarını sürdürüyorsa, o zaman bir OnaylanmışSınıfı'nızın, ancak “Onaylanmış Satış” ismine sahip bir ContractType sınıfı örneğinin bile olmayabilir. Bunu yaparsanız, Veritabanındaki doğrulama kuralları (althoug, doğrulama kurallarınız karmaşıksa, veritabanında saklanırsa dikkatli olun)

Sözleşme türleri, doğrulama kuralları ile birleştirildiyse, bunları yalnızca linq sorguları olarak yazın (veya Ancak siz onaylarınızı yazmak istersiniz ve bunları kodlayın.

Doğrulayıcıları kaydetmek istiyorsanız, bunları json nesneleri olarak depolamaya bile bakabilirsiniz. Geleneksel veritabanlarının zayıf çalışmasının sebebi, eğer 2 validasyonum varsa, yaş> 18 ve Adının en az 4 harf ve sadece a-z olması durumunda veri tabanına çok farklı şeyler depolamak zorunda olduğumdur. Bir TPH yaklaşımı kullanırsam, bir propertyname (yaş, ad), number (18, 4) ve allowedCharacters (a-z) alanı olabilir. Ancak şimdi sayı alanının her iki onaylama için çok farklı şekilde kullanıldığını görüyorsunuz. Bu yüzden her zaman boş olan 2 sayı alan 1 olsun ..... bir veritabanı elbette bu işlemek olabilir ama json serileştirme daha hızlı olabilir (eğer depolamak istiyorsanız) ve sadece kodlamayı değiştirmiyorsa Onları müşteri için yeterince iyi probally (şimdi 2 yıl sonra kontratta bir değişiklik yapmak istiyorsa, o zaman veritabanı yapınızın kurulumunu almak için 2 saat harcamak yerine 2 saat geçiriyorsun)

+0

Aldana, Yükselmek istediğim tartışma Batavia'ya daha yakındır: Kullanıcı, sözleşme türlerini değiştirebileceğinden, problemli olabilir, çünkü veritabanında kuralları tutmak gerekir, diğer yandan, her tür kodlama gerektirdiğinde, yani talepler türünün ilgili olduğu bir Stratejinin oluşturulması, kullanıcının asla ContractType tablosunu sürdürmemesi gerekir. Sistemdeki her tür veya durum alanının şüphesiz kurallar olduğuna katılıyor musunuz? – Dummy

+0

@Dummy "Kullanıcı, sözleşme türlerini değiştirebilir" ile ne demek istiyorsun? Kullanıcının bir kullanıcı arayüzü aracılığıyla yeni sözleşme türleri ekleyebilmesini ister misiniz? Bir sözleşme türü için kuralları düzenlemek için? Ya da sadece sözleşmenin sözleşme türünü değiştirmek? Bu nasıl "sorunlu veritabanında kuralları tutmak" yapar? – guillaume31

+0

Sorunludur çünkü kullanıcılar gereken gelişmeleri yapmamaları ve mevcut kuralları ihlal etmemeleri gereken kurallar ekleyebilir veya ekleyebilirler. Bu bir sorun değil kuralları devre dışı bırakmak ama yeni bir tane eklemek isteyen bir görev olduğunu geliştirme – Dummy

0

Ben TPH yaklaşım kullanarak herhangi bir sorun görmüyorum teşekkürler, bu yüzden .. Neden olmasın?

Bu basittir ve modelinizin arkasındaki semantik ile uyumlu görünüyor.

Başka bir yaklaşımı düşünürseniz, yalnızca bu sınıfların, aralarında paylaşılmayacak pek çok özel özellik barındırdığını düşünürseniz ve diskte çok fazla yer kaplayacağınızı düşünüyorsanız ya da Bu alanlar üzerindeki boş sınırlamaları tanımlamak.

İlgili konular