您的工作是設計一個支持跟蹤任務的項目計劃類庫(類似於MS Project的工作方式)。這個類庫有一個Task
對象(等等)。.NET對象層次結構 - 事件或不事件
的Task
對象具有EstimatedHours
(Double
),StartDate
(DateTime
),和EndDate
(DateTime
)屬性,等等。 A Task
對象可以有一個父項Task
和幾個子項Task
對象。 EstimatedHours
,StartDate
和EndDate
具有子項(是父項)的Task
的屬性取決於其直接子項的屬性。父母Task
的StartDate
是其子女最早的StartDate
。母公司Task
的EndDate
是其子女的最新EndDate
。父母Task
的EstimatedHours
是其子女EstimatedHours
的總和。因此,在有孩子的Task
上更改這些屬性是無效的。
如何處理EstimatedHours,StartDate或EndDate在具有父項的任務中更改的用例?(父母的屬性是其子女的反映,因此對子女的任何更改都可能需要對父母的屬性進行調整以適當反映這些更改)
一種選擇是在每個屬性更改時都有一個事件。父母Task
會在其直接子女Task
對象上偵聽這些事件,並在發生這些事件時對其自己的屬性進行適當更改。這是一個好方法,還是有更好的方法? 你怎麼辦?
這裏是一個什麼樣的Task
對象可能看起來像一個基本思想:
Public Class Task
Private mChildren As List(Of Task)
Private mEndDate As DateTime = DateTime.MinVlue
Public Property EndDate() As DateTime
Get
Return mEndDate
End Get
Set(ByVal value As DateTime)
mEndDate = value
'What to do here?
End Set
End Property
Private mEstimatedHours As Double = 0.0
Public Property EstimatedHours() As Double
Get
Return mEstimatedHours
End Get
Set(ByVal value As Double)
mEstimatedHours = value
'What to do here?
End Set
End Property
Private mStartDate As DateTime = DateTime.MinVlue
Public Property StartDate() As DateTime
Get
Return mStartDate
End Get
Set(ByVal value As DateTime)
mStartDate = value
'What to do here?
End Set
End Property
End Class