Pregunta

En lugar de utilizar una interfaz como la siguiente:

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

Normalmente yo sólo hago el constructor de un objeto ejecutar el código de inicio (), e implementar IDisposable para que el método dispose ejecuta el código de parada ().

¿Es sólo una cuestión de estilo? O me estoy perdiendo algo importante al no tener algo así como IStartable? Todo lo que veo es una complejidad adicional, ya que hay que pueda funcionar de forma arrancado / parado estado.

¿Cuáles son los pros y los contras de la utilización de arranque / parada vs utilizando ctor / disponer, especialmente en el contexto de un contenedor IoC / DI?

EDIT: Grandes respuestas, me han convencido para usar una interfaz para objetos iniciable. No puedo decidir quién es el mejor respuesta es así que voy a aceptar el que tiene el mayor número de votos hasta después de 24 horas.

¿Fue útil?

Solución

La ventaja general a la utilización de una interfaz es que son auto-descripción y la auto-publicidad. Si no hay ninguna interfaz, usted no tiene una forma de pedir un objeto "se puede arrancar y parar?" Si usted hace uso de una interfaz, por el contrario, se puede consultar objetos para ver cuál de ellos va a responder a ese tipo de mensajes. Entonces que se puede garantizar con seguridad que estos objetos han implementado la funcionalidad encapsulada por la interfaz.

Otros consejos

En general, los constructores deben producir un objeto inicializado correctamente-

y nada más!

Se podría depender de lo que, en concreto, que quiere decir estar sucediendo cuando usted dice Start (). Pero, en general, inicialización de objetos de mezclar con la ejecución de la rutina (especialmente con estado y / o de larga duración ejecución!) Viola SoC .

También deja una gran cantidad de ambigüedad. Para un consumidor, para un objeto dado, ¿cómo sabemos que está "empezando" cuando invocamos la ctor? "Para este objeto dado, que implementa ningún contrato, debo dejar que se esperan en el autor que se ajusta a mis expectativas"? Una interfaz hace que la presencia y disponibilidad de la acción explícita.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top