5

Çevremde oynadığım bazı basit doğrulama öğeleri için bazı akıcı arabirimler oluşturma sürecindeyim. Fark ettiğim bir şey, yaratılmış çok fazla farklı nesneler olduğudur. Aşağıdaki tablolar verilen ÖrneğinAkıcı Arabirimler - oluşturulmakta olan nesne sayısı

: '' her için

Check.Assertion.ForValue.That(value, "value").IsNotNull() : void 

Check.Assertion.ForArgument.That(value, "value").IsNotNull() : void 

Validate.Assertion.ForDate.That("Test").IsNotNull() : bool 

Validate.Assertion.ForNumeric.That("Test").IsNotNull() : bool 

(sonuncusunu kabul et) Bir nesneyi canlandırıyorum. Eğer akıcı bir arayüz kullanmıyorsam, statik yöntemler kullanmış olurdum.

Merak ettiğim şey, statik yöntemlerle çalışmak için bu örnek nesneler kullanıldığında (gerçekte küçük nesneler olduklarını) performansta gerçek bir farkın nerede fark edileceğini bilen biri ise, merak ediyorum.

Şerefe mutlaka her yerde yeni nesneler inşa etmek gerekmez Anthony

cevap

9

Not. Akıcı arayüzün çoğunu arayüzler üzerinden çözebilir ve sadece bir nesnede çok sayıda arabirim uygulayabilirsiniz. Bu durumda, sadece yeni bir arayüz üzerinden this'u döndürebilirsiniz.

Örnek:

public interface ICheckAssertionForValue 
{ 
    ICheckAssertionForValueThat That(Object value, String name); 
} 

public interface ICheckAssertion 
{ 
    ICheckAssertionForValue ForValue { get; } 
} 

public class Check : ICheckAssertion 
{ 
    public static ICheckAssertion Assertion 
    { 
     get { return new Check(); } 
    } 

    ICheckAssertionForValue ICheckAssertion.ForValue 
    { 
     get { return this; } // <-- no new object here 
    } 

    ICheckAssertionForValueThat ICheckAssertionForValue.That(Object value, String name) 
    { 
     return new SomeOtherObject(value, name); 
    } 
} 
+0

Bunu düşünmemiştim serin Hey ... biz bu yöntemin içinde yeni SomeOtherObject nesnesi dönüyor Bir şey soracağım, biz uygulamak için işaretleyin alınamadı ICheckAssertionForValueBu arabirim ve sadece bunu tekrar döndürmek? Akıcı bir arayüz tasarlarken, ne kadar sorumluluğun tek bir sınıfa girmesi gerektiğine inanıyorum. Belki de cevap, eğer akıcı bir şekilde yapmazsam hepsi aynı sınıfta olsaydı ... ne düşünüyorsun? –

+0

Yoksa yeni nesneler oluşturma konusunda çok mu endişeleniyorum? Tek şey, bu arabirimi çok fazla kullanacağım (yani, farklı yöntemlerde paramların boş olup olmadığını ve eğer istisna atarsa) –