:私は通常はオブジェクトのコンストラクターがスタート()のコードを実行させる、とDisposeメソッドは、停止()のコードを実行されるようにIDisposableインターを実装IStartableのようなコンセプトを使用する利点は何ですか?代わりに、このようにインタフェースを使用しての
public interface IStartable
{
void Start();
void Stop();
}
。
それは単なるスタイルの問題ですか?あるいは、私はIStartableのようなものを持たないことで何か重要なことを見逃しているのですか?あなたがそれが開始/停止状態を維持しなければならないので、私が見るすべては複雑です。
特にIoC/DIコンテナのコンテキストで、ctor/disposeを使用してスタート/ストップを使用する場合の長所と短所は何ですか?
EDIT:すばらしい答えは、起動可能なオブジェクトにインターフェイスを使用するように確信しています。私は24時間後に最大の票を持っている人を受け入れるように、誰が答えが最高かを決めることができません。
これは本当に大きなプロです。追加する複雑さをどのように管理していますか?あなたは複数のスタートを心配したり、オブジェクトが停止した後に再び始めることができますか? –
私はそれが必然的に複雑さを加えるとは言いません。結局のところ、あなたはすでに実装を何か別の方法で書く必要がありました。今では、単に外部インターフェイスに準拠していると宣言しています。あなたの2番目の質問については、インターフェイスはそれに関するルールを定義する必要があります。適合する実装は、どのような標準が記述されていても満たすことが期待されます。たとえば、IEquatableの場合、Equals実装では、nullオブジェクトとの比較で常にfalseが返されることを保証する必要があります。 –
しかし、コンストラクタで "開始"することの1つは、開始メソッドを2回呼び出すことができず、再起動の可能性について心配する必要がないということです。インターフェイスが複数回の起動に対して「未定義」な動作をしていると言うのは受け入れられますか?または再起動しますか?または、無効化された状態の変更に対して例外をスローするヘルパーを持つ方が、Initialized - > Started - > Stoppedのみが許可され、他のトランジションはスローされます。 –