0

假设我有非常基本的任务类,如下所示:

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

现在我想将规划“行为”添加到我的一些任务中。显然我将不得不有类似的东西:

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

和两个具体算法,每个都有不同的输入参数:

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

}

问题是:

什么是用于将基本任务类连接到作为选项的具体计划策略的最佳设计模式,这意味着并非所有任务都需要进行计划,即。有规划行为吗?

用户应该有可能“促进”计划中的任务,也可以从特定任务中“删除”这种行为。

这一切如何适用于通过 EF 或其他 ORM 持久化到数据库,特别是在从数据库读取时?哪种模式最适合从 DB 读取并创建我的任务对象?

4

1 回答 1

0

似乎您在这里有两个不同的问题。一个是可计划任务的策略算法——您可以使用策略模式来处理这个问题。关于不可计划的任务,我看到了两种可能的方法:

  1. 将其排除在设计模式的范围之外。没关系,如果不需要,不应将模式强加于您的设计。
  2. 有一个 2 级策略 - 上层选择任务是否可计划,下层(仅可计划)应用您的策略。

另一个是每个任务的一组可能行为。这可以通过Composite 模式来解决。没有行为也是一种行为。

于 2012-11-21T22:25:49.313 回答