2010-12-07 14 views
6

Aşağıdaki gereksinimlere sahip bölümümüzün bir veri doğrulama yardımcı programını kullanıyorum. - Dinamik olarak yeni işletme varlığı ekleme - Bir varlığa dinamik olarak yeni değerler ekleme. - İşletme varlığının listesini ve bunların geçerlilik durumunu görüntülemek için bir Kullanıcı Arabirimi - Kullanıcının, doğrulanmış tüm ticari varlık geçerliliğini başlatma seçeneğine sahip olması gerekir. - Herhangi bir doğrulama başarısız olursa, UI bir doğrulama hata mesajı görüntüler. - Doğrulamalardan herhangi biri başarısız olsa bile sistem tümüyle doğrulanmaya geçmeli, böylece tüm yapılandırılmış validai değerleri doğrulanmalıdır.Doğrulama Tasarım Örneği

İnternette arama yaptıktan sonra, iş gereksinimi karşılamak için aşağıdaki 2 tasarım tasarımı deseninin birini buldum. Bir tane Decoratör kalıbı ve bir diğeri ise Zincire of Command (Sorumluluk Zinciri Zinciri). Şimdi sorum, hangisi daha iyi? Daha iyi bir fikri olan var mı?

Teşekkür

+0

Sanırım sorunuzu yeniden yazmanız gerekebilir. Komuta Zinciri Örüntüsü ile ne yapmak istediğinizi açıklayabilir misiniz? –

cevap

7

Ben ne istediğini Specification Pattern olduğunu düşünüyorum. Yani böyle bir şey yapacağını:

public void StartDateNotInPastSpecification : ISpecification<ISomeBusinessObject> 
{ 
    public bool IsSatisfiedBy(ISomeBusinessObject myBusinessObject) 
    { 
    return myBusinessObject.StartDate >= DateTime.Now; 
    } 
} 

bu deseni hakkında güzel bir şey, her kural izolasyon kolaylıkla test edilebilir olmasıdır ve bu empoze bazı çerçeveler aksine (doğrulama kurallarının ne zaman seçmek için olsun karar size).

4

Belirtim desenini de kullanıyorum. Bu, bunun temel bir uygulamasıdır. Bu uygulamayla

public class Specification<T, E> : ISpecification<T, E> 
{ 
    private Predicate<T> predicate; 

    public Specification(Predicate<T> predicate) 
    { 
     this.predicate = predicate; 
    } 

    public bool IsSatisfiedBy(T candidate) 
    { 
     return this.predicate.Invoke(candidate); 
    } 
} 

, sadece bu gibi yapıcı bir yüklem geçmesi: Yerine birkaç sınıfların

var specification = new Specification<SomeDomainClass>(x => x.SomeDomainBoolMethod()); 

(her koşul başına bir Alanımda), ben birkaç bool yöntemleri var işim nesnelerim.

+0

daha açıklayıcı sınıf/yöntem isimleri eklemek için örnek kullanım kodunu ekleyebilir/yeniden yazabilir misiniz? –