すべて同様の動作をするオブジェクトの階層があります。動作を POCO 定義から分離したいと考えています。動作はオブジェクトをさまざまな状態に移動することを表しているため、これは状態パターンの仕事のように思えます。ただし、各オブジェクトの動作がわずかに異なる可能性があるため、関数ごとに 1 つの定義があるほど単純ではありません。
たとえば、抽象基本クラスに基づいて、次のクラスがあるとします。
public abstract BaseClass
{
public int Property1 { get; set; }
public int Property2 { get; set; }
}
public Class1 : BaseClass
{
public string PropertyA { get; set; }
public string PropertyB { get; set; }
}
public Class2 : BaseClass
{
public string PropertyC { get; set; }
public string PropertyD { get; set; }
}
階層は、さまざまなタイプのオブジェクトを表します。また、オブジェクトはすべて同じ基本的なワークフロー (送信済み、承認済み、実行済み、クローズ済み) に従っているとしましょう。
現在、各関数の動作も階層的です。つまり、Class1 で関数 Approve() を呼び出すことは、BaseClass から継承された動作を呼び出すことと同じである必要がありますが、Class2 は Approve() 関数をオーバーライドします。これは、そのタイプが異なる承認に従うためです。処理する。
State Pattern をこれらのオブジェクトに適用しようとして迷っています。関数をオブジェクト自体に配置し、そのように継承することを選択できます。これは正常に機能しますが、POCO 設計が壊れます。オブジェクトの種類ごとに switch ステートメントを使用して Approve() 関数を実装することもできますが、それでは多態的な設計ができなくなります。
状態パターンを多層ポリモーフィック オブジェクト定義に適用し、設計原則との一貫性を維持するにはどうすればよいですか。
更新:明確にさせてください。オブジェクトに作用する以外のことを行う関数はPOCOに属していないと思います。例: 承認機能は、オブジェクトの状態を変更するだけでなく、電子メールを送信し、他のシステムでイベントをトリガーします。多分それは私だけです。