Pergunta

Em vez de usar uma interface como este:

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

Normalmente, eu apenas fazer o construtor de um objeto executar o código Iniciar (), e implementar IDisposable para que o método Dispose executa o código Stop ().

É apenas uma questão de estilo? Ou estou faltando alguma coisa importante por não ter algo como IStartable? Tudo o que vejo é a complexidade extra, porque você tem que manter a sua começou estado / interrompido.

Quais são os prós e contras do uso de start / stop vs usando ctor / dispor, especialmente no contexto de um contêiner IoC / DI?

EDIT: Grandes respostas, você me convenceu a usar uma interface para objetos inicializáveis. Eu não posso decidir quem é resposta é o melhor, então eu vou aceitar quem tem a maioria dos votos se após 24 horas.

Foi útil?

Solução

A vantagem geral para usar uma interface é que eles são auto-descrição e auto-publicidade. Se não há nenhuma interface, você não tem uma maneira de pedir um objeto, "pode ??ser iniciado e interrompido?" Se você usar uma interface, por outro lado, você pode consultar objetos para ver qual deles irá responder a esses tipos de mensagens. Então você pode ser garantido com segurança que esses objetos têm implementado a funcionalidade encapsulado pela interface.

Outras dicas

Em geral, os construtores devem produzir um objeto devidamente inicializado

e nada mais!

Ele poderia depender do que, especificamente, você quer dizer estar acontecendo quando você diz Iniciar (). Mas, em geral, misturando inicialização objeto com a execução de rotina (execução especialmente stateful e / ou de longa duração!) Viola SoC .

Além disso, deixa uma grande quantidade de ambigüidade. Para um consumidor, para um determinado objeto como sabemos que está "começando" Quando invocamos a ctor? "Para este dado objeto, que implementa nenhum contrato, devo deixá-lo para a esperança no autor que está de acordo com as minhas expectativas"? Uma interface faz com que a presença e disponibilidade da ação explícita.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top