Domanda

Invece di utilizzare un'interfaccia come questa:

public interface IStartable
{
    void Start();
    void Stop();
}

Di solito faccio semplicemente in modo che il costruttore di un oggetto esegua il codice Start() e implemento IDisposable in modo che il metodo Dispose esegua il codice Stop().

È solo una questione di stile?Oppure mi sto perdendo qualcosa di importante non avendo qualcosa come IStartable?Tutto quello che vedo è una complessità extra, perché devi mantenere il suo stato avviato/arrestato.

Quali sono i pro e i contro dell'utilizzo di start/stop rispetto all'utilizzo di ctor/dispose, soprattutto nel contesto di un contenitore IoC/DI?

MODIFICARE:Ottime risposte, mi hai convinto a utilizzare un'interfaccia per oggetti avviabili.Non riesco a decidere quale sia la risposta migliore, quindi accetterò chi avrà più voti dopo 24 ore.

È stato utile?

Soluzione

Il vantaggio generale di utilizzare un'interfaccia è che sono auto-descrizione e di auto-pubblicità. Se non c'è alcuna interfaccia, non si dispone di un modo per chiedere un oggetto, "può essere avviato e arrestato?" Se si utilizza un'interfaccia, al contrario, è possibile interrogare gli oggetti per vedere quale di essi rispondere a tali tipi di messaggi. Poi si può essere garantito in modo sicuro che tali oggetti hanno implementato la funzionalità incapsulata dall'interfaccia.

Altri suggerimenti

in generale, i costruttori dovrebbero produrre un oggetto correttamente inizializzato

e niente di più!

Si potrebbe forse dipendere da quello che, nello specifico, si intende per accadere quando si dice Start (). Ma in generale, mescolando inizializzazione dell'oggetto con l'esecuzione di routine (soprattutto stateful e / o di lungo corso di esecuzione!) Viola SoC .

Si lascia anche una grande quantità di ambiguità. Per un consumatore, per un dato oggetto come facciamo a sapere che è "iniziando" quando invochiamo il ctor? "Per questo dato oggetto, che implementa nessun contratto, devo lasciarlo sperare in l'autore che è conforme alle mie aspettative"? Un'interfaccia rende la presenza e la disponibilità della azione esplicita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top