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
只是每个任务可能具有的可选行为之一,那么会发生什么呢。如果有更多的行为,如可销售的
,可跟踪的
,可交付的
,等等,并且如果所有这些行为都是可选的,那么对于每个可能的组合,我将以大量的继承类结束,我认为这是不好的。据我所知,我应该实现组合是某种形式,并将每个任务作为可选行为的组合,但是,正如我所提到的,如果任务没有特定行为,我不确定该怎么做。。。