Quais são as vantagens de usar um conceito como IStartable?
-
05-09-2019 - |
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.
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.