2009-06-03 9 views
6

Ad esempio, (sebbene non sia un'interfaccia) la classe Stream in .NET ha un'implementazione fornita da Stream.Null che semplicemente scarta i dati. PowerShell ha Out-Null.Esiste uno schema riconosciuto per oggetti inutili che implementano un'interfaccia?

Nelle applicazioni che ho sviluppato, ho spesso trovato utile implementare un'interfaccia IFoo con un'implementazione predefinita NullFoo o simile quando è preferibile avere un'implementazione inutile piuttosto che non passare affatto un oggetto.

La mia domanda è: come dovrei fare riferimento a questa pratica per documentare o spiegare un'architettura? C'è un nome riconosciuto o un modello di progettazione GoF/Fowler per questo?

risposta

3

A quanto pare ha un nome, "NullObject", ma la domanda può avere un aspetto diverso:

Fin dall'inizio la mia realizzazione dell'intero progetto è costituito su entrambi i metodi stub o platine dati.

Io uso il termine "Stub" riferendosi a interfacce esterne che non hanno ancora un'implementazione (ma già ti danno un ritorno significativo, permettendoti di costruire il progetto dal primo giorno).

Io uso un "Sinker" riferendosi a un'interfaccia che mi consente di indirizzare i dati ad esso, ma in realtà non va da nessun'altra parte da lì, e non è colpa del mittente (quindi sarebbe ingombrante codificare "non inviare "condizione entro tale ambito).

Deve raggiungere una compilazione completa e POI, iniziamo la codifica. Con il tempo quasi tutti gli stub diventano funzionali (e alcuni tratteranno o forniranno dati) e quasi tutti i sinker diventeranno funzionali. A revisioni del codice scopriamo che alcuni platine possono cessare di esistere, altri possono essere raggruppati, ecc, ecc

1
  • L'oggetto sembra essere chiamato un Null Object, come altri utenti hanno fatto notare
  • Se si sta programmando nell'ambiente .Net, è possibile seguire la convenzione Microsoft che è 'Empty' (come in String.Empty). Vedere il seguente .Net BCL Examples Search
+0

Stream.Null vs Stream.Empty – dss539