下面的代码详细描述了我的设计问题。我有一个数据库中的任务表,可以有不同类型的重复模式。任务表具有每个可能的重复模式字段的列。但是,我希望Task对象根据db中的哪个模式创建适当的模式。下面的代码将做到这一点,但接下来的问题是调用代码将不得不在检查任何操作之前检查返回的类型。将平面DB模型映射到OO模型
例如
var t = new Task();
var pattern = t.Recurrance;
调用代码不知道正在创建哪种类型的递归?
什么是更好的方式来建模?
class Task
{
private int recurrenceType = 0; //pulled from the db
public Task()
{
//determine recurrence type from database
switch (recurrenceType)
{
case 0:
Recurrance = new RecurrenceDaily();
break;
case 1:
Recurrance = new RecurrenceMonthly();
break;
case 2:
Recurrance = new RecurrenceWeekly();
break;
}
}
public RecurrenceBase Recurrance { get; set;}
}
abstract class RecurrenceBase
{
public int Frequency { get; set; }
}
class RecurrenceDaily : RecurrenceBase
{
public bool Weekends { get; set; }
}
class RecurrenceWeekly : RecurrenceBase
{
public DaysOfWeekFlagsEnum DaysOfWeek { get; set; }
}
class RecurrenceMonthly : RecurrenceBase
{
public byte DayOfMonth { get; set; }
public WeekEnum Week { get; set; }
public DayOfWeekEnum DayOfWeek { get; set; }
}
谢谢..通过添加Set to Recurrence属性来修复它。 – 2011-04-22 21:44:48
如果你不想让别的东西叫它,你可以把它变成一个私人二传手。但是,你还没有提到我的前两点。 – 2011-04-22 21:48:08