次のような非常に基本的なタスククラスがあるとします。
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からの読み取りとタスクオブジェクトの作成に最適なパターンはどれですか?