Question

Au lieu d'utiliser une interface comme ceci:

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

En général, je fais le constructeur d'un objet exécuter le code de démarrage (), et mettre en œuvre IDisposable afin que la méthode Éliminez exécute le code Stop ().

Est-il juste une question de style? Ou suis-je manque quelque chose d'important de ne pas avoir quelque chose comme IStartable? Tout ce que je vois est la complexité supplémentaire, parce que vous devez maintenir est démarré / arrêté l'état.

Quels sont les avantages et les inconvénients de l'utilisation de démarrage / arrêt vs en utilisant cteur / disposer, en particulier dans le contexte d'un conteneur IoC / DI?

EDIT: réponses Grand, vous avez m'a convaincu d'utiliser une interface pour les objets amorçable. Je ne peux pas décider qui est le meilleur réponse est donc je vais accepter celui qui a le plus des voix au bout de 24 heures.

Était-ce utile?

La solution

L'avantage général à l'aide d'une interface est qu'ils sont auto-description et l'auto-publicité. S'il n'y a pas d'interface, vous ne disposez pas d'un moyen de demander un objet «vous pouvez démarrer et arrêter? » Si vous utilisez une interface, en revanche, vous pouvez interroger des objets pour voir lequel d'entre eux répondront à ce genre de messages. Ensuite, vous pouvez être en toute sécurité garanti que ces objets ont mis en œuvre la fonctionnalité encapsulée par l'interface.

Autres conseils

en général, les constructeurs doivent produire un objet correctement initialisé

et rien de plus!

Il pourrait dépendre de ce que, en particulier, vous voulez dire se produire lorsque vous dites Start (). Mais dans l'initialisation générale, objet mélange avec l'exécution de routine (en particulier stateful et / ou de longue durée d'exécution!) Constitue une violation SoC .

Il laisse aussi beaucoup d'ambiguïté. Pour un consommateur, pour un objet donné, comment pouvons-nous le connaissons est « commence » quand nous invoquons le cteur? « Pour cet objet donné, qui met en œuvre aucun contrat, je dois laisser espérer à l'auteur qu'il est conforme à mes attentes »? Une interface permet la présence et la disponibilité de l'action explicite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top