Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 建议使用的设计模式_C#_Entity Framework_Design Patterns - Fatal编程技术网

C# 建议使用的设计模式

C# 建议使用的设计模式,c#,entity-framework,design-patterns,C#,Entity Framework,Design Patterns,假设我有非常基本的任务,如下所示: public class Task { string Title { get; set; } } 现在我想把计划“行为”添加到我的一些任务中。显然,我必须要有这样的东西: public interface IPlannable { public void CalculatePlan(); public DateTime Start { get; } public DateTime Finish { get; } } 以及两个

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

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持久化到数据库,特别是在从数据库读取时?什么样的模式最适合从数据库读取并创建回我的任务对象?

这里似乎有两个不同的问题。 一个是可规划任务的策略算法-您可以使用。 关于不可规划的任务,我看到了两种可能的方法:

  • 将其从设计模式的范围中排除。这是完全可以的,如果不需要的话,图案不应该被强加在你的设计上
  • 有一个两级策略——上级选择任务是否可规划,下级(仅适用于可规划)应用策略

  • 另一个是每个任务的一组可能行为。这个问题可以通过解决。没有行为也是一种行为

    谢谢你的回答。我想是这样的,但我仍然不清楚,若任务不需要计划,该怎么办。如果我在类中有变量任务,比如:
    private IPlannable p当任务没有计划时,我是否应该保持为null(未实例化),或者使用不带额外参数的“虚拟”具体策略以及空的
    CalculatePlan()
    方法更好?我已经添加到了答案中,您的alt(1)是否意味着我应该有如图所示的基本任务类,并使用附加变量IPlannable从中继承?我不认为这是一个好方法?嗯,您的可规划任务是一个具有所有属性的
    任务
    ,因此我认为它应该继承自
    任务
    ,并实现
    I可规划
    接口。
    可规划
    任务是一个
    任务
    ,是的。但如果
    planable
    只是每个任务可能具有的可选行为之一,那么会发生什么呢。如果有更多的行为,如
    可销售的
    可跟踪的
    可交付的
    ,等等,并且如果所有这些行为都是可选的,那么对于每个可能的组合,我将以大量的继承类结束,我认为这是不好的。据我所知,我应该实现组合是某种形式,并将每个任务作为可选行为的组合,但是,正如我所提到的,如果任务没有特定行为,我不确定该怎么做。。。