5

Ich bin dabei, einige fließende Interfaces für einige einfache Validierungs-Tools zu erstellen, mit denen ich herumspiele. Eine Sache, die ich bemerkt habe, ist, dass ich viele verschiedene Objekte erstellt habe.Fluent Interfaces - die Anzahl der Objekte, die erstellt werden

Zum Beispiel angesichts der folgenden Aussagen: ''

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 

für jeden (Akzeptiere die letzte) Ich baue ein Objekt neu auf. Wenn ich hier kein fließendes Interface benutzt hätte, hätte ich nur statische Methoden benutzt. Ich frage mich, ob jemand weiß, wo man einen wirklichen Unterschied in der Leistung bemerken würde, wenn man diese Anzahl von Instanzobjekten verwendet (man beachte, dass es ziemlich kleine Objekte sind), da man mit statischen Methoden arbeiten kann.

Prost Anthony

Antwort

9

Beachten Sie, dass Sie nicht unbedingt brauchen, um neue Objekte überall zu konstruieren. Sie könnten einfach die meiste fließende Schnittstelle über Schnittstellen lösen und einfach viele Schnittstellen für ein Objekt implementieren. In diesem Fall können Sie einfach this zurückgeben, nur über eine neue Schnittstelle.

Beispiel:

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

Hey kühlen ich nicht gedacht hatte ... Nur eine schnelle Sache, wo wir ein neues SomeOtherObject Objekt innerhalb der diese Methode zurückkommen, könnten wir implementieren nicht bekommen prüfen die ICheckAssertionForValueThat Schnittstelle und nur diese wieder zurückgeben? Ich denke, es kommt darauf an, wie viel Verantwortung in eine einzige Klasse fließen sollte, wenn eine fließende Oberfläche entworfen wird. Vielleicht ist die Antwort, wenn ich es nicht fließend machen würde, wäre alles in der gleichen Klasse ... Was denkst du? –

+0

Oder mache ich mir zu viele Sorgen um neue Objekte? Die einzige Sache ist, dass ich diese Schnittstelle ein weites Bit benutzen werde (d. H. Um zu überprüfen, ob Parameter auf verschiedenen Methoden null sind und wenn ja, Ausnahmen werfen) –