0

次のような非常に基本的なタスククラスがあるとします。

public class Task
{
    string Title { get; set; }
}

ここで、いくつかのタスクに計画の「動作」を追加したいと思います。明らかに、私は次のようなものを持っている必要があります:

public interface IPlannable
{
    public void CalculatePlan();
    public DateTime Start { get; }
    public DateTime Finish { get; }
}

それぞれ異なる入力パラメータを持つ2つの具体的なアルゴリズム:

public class PlanStrategyA : IPlannable
{
    private int parameter1;
    private int parameter2;
    private DateTime start;
    private DateTime finish;

    public PlanStrategyA(int p1, int p2)
    {
        parameter1 = p1;
        parameter2 = p2;
    }

    public void CalculatePlan()
    {
        // ... uses parameter1 & parameter2
        // ... to calculate start and finish
    }

    public DateTime Start { get { return this.start; } }

    public DateTime Finish { get { return this.finish; } }
}

public class PlanStrategyB : IPlannable
{
    public int parameter3;

    // ... the rest is similar to PlanningStrategyA

}

質問は:

基本タスククラスをOPTIONとして具体的な計画戦略に接続するために使用するのに最適なデザインパターンは何ですか。つまり、すべてのタスクを計画する必要はありません。計画行動をとるには?

ユーザーは、計画するタスクを「プロモート」する可能性があり、特定のタスクからこの動作を「削除」する可能性もあります。

これはすべて、特にデータベースから読み取るときに、EFまたは他のORMを介してデータベースに永続化する場合にどのように適用されますか?DBからの読み取りとタスクオブジェクトの作成に最適なパターンはどれですか?

4

1 に答える 1

0

ここには2つの異なる問題があるようです。1つは、計画可能なタスクの戦略アルゴリズムです。これを処理するために戦略パターンを使用できます。計画できないタスクに関しては、2つの可能なアプローチがあります。

  1. デザインパターンの範囲から除外します。それは完全に大丈夫です、必要がなければパターンがあなたのデザインに強制されるべきではありません。
  2. 2つのレベルの戦略があります-タスクが計画可能かどうかを選択するための上位レベルと、戦略を適用するための下位レベル(計画可能のみ)。

もう1つは、各タスクで可能な動作のセットです。これは、複合パターンで取り組むことができます。行動は行動でもありません。

于 2012-11-21T22:25:49.313 に答える