5

Sono in procinto di creare alcune interfacce fluenti per alcune semplici convalide con cui sto giocando. Una cosa che ho notato è che ho creato molti oggetti diversi.Fluent Interfaces: il numero di oggetti creati

Per esempio date le seguenti affermazioni:

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 

per ogni '' (accetta per l'ultimo) Sto facendo il cronometro di un oggetto. Se non stavo usando un'interfaccia fluente qui avrei semplicemente usato metodi statici.

Quello che mi chiedo è se qualcuno sa dove si noterebbero delle reali differenze nelle prestazioni quando si utilizza questo numero di oggetti di istanza (si noti che sono oggetti piuttosto piccoli) come apposi a lavorare con metodi statici.

Acclamazioni Anthony

risposta

9

Si noti che non hanno necessariamente bisogno di costruire nuovi oggetti di tutto il luogo. Potresti semplicemente risolvere la maggior parte dell'interfaccia fluente attraverso le interfacce e implementare molte interfacce su un solo oggetto. In tal caso potresti semplicemente restituire this, solo attraverso una nuova interfaccia.

Esempio:

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 fresco io non ci avevo pensato ... Solo una cosa veloce, dove stiamo tornando un nuovo oggetto SomeOtherObject all'interno Tale metodo, non poteva che ottenere un controllo per l'attuazione del ICheckAssertionForValueThat interfaccia e basta restituirlo? Immagino che dipenda da quanta responsabilità dovrebbe andare in una singola classe quando si progetta un'interfaccia fluente. Forse la risposta è, se non lo facessi fluentemente, sarebbe tutto nella stessa classe ... cosa ne pensi? –

+0

O mi preoccupo troppo della creazione di nuovi oggetti ?? L'unica cosa è che userò questa interfaccia molto lontano (cioè per controllare se i parametri su metodi diversi sono nulli e in tal caso lanciare eccezioni) –