下面的代碼詳細描述了我的設計問題。我有一個數據庫中的任務表,可以有不同類型的重複模式。任務表具有每個可能的重複模式字段的列。但是,我希望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