你的工作是设计一个项目计划类库,支持任务跟踪(类似于 MS Project 的功能)。该类库有一个Task对象(以及其他对象)。
Task对象有一些属性,包括 EstimatedHours(Double)、StartDate(DateTime)和EndDate(DateTime)。Task对象可以有一个父Task,以及几个子Task。Task对象的EstimatedHours、StartDate和EndDate属性(当它是父Task时)取决于其直接子Task的这些属性。父Task的StartDate是其所有子Task的最早StartDate。父Task的EndDate是其所有子Task的最晚EndDate。父Task的EstimatedHours是其所有子Task的EstimatedHours之和。因此,在具有子Task的Task上更改这些属性是无效的。
当一个具有父Task的Task的EstimatedHours、StartDate或EndDate被更改时,你将如何处理呢? (父Task的属性反映了其子Task的属性,因此对子Task的任何更改可能需要相应地调整父Task的属性)
一种选择是为每个属性更改设置事件。父Task将在其直接子Task对象上侦听这些事件,并在发生这些事件时适当更改其自身的属性。这是一个好方法吗?你会怎样做?
以下是Task对象的基本结构:
Task对象有一些属性,包括 EstimatedHours(Double)、StartDate(DateTime)和EndDate(DateTime)。Task对象可以有一个父Task,以及几个子Task。Task对象的EstimatedHours、StartDate和EndDate属性(当它是父Task时)取决于其直接子Task的这些属性。父Task的StartDate是其所有子Task的最早StartDate。父Task的EndDate是其所有子Task的最晚EndDate。父Task的EstimatedHours是其所有子Task的EstimatedHours之和。因此,在具有子Task的Task上更改这些属性是无效的。
当一个具有父Task的Task的EstimatedHours、StartDate或EndDate被更改时,你将如何处理呢? (父Task的属性反映了其子Task的属性,因此对子Task的任何更改可能需要相应地调整父Task的属性)
一种选择是为每个属性更改设置事件。父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