【发布时间】:2010-10-19 08:20:28
【问题描述】:
你的工作是设计一个支持任务跟踪的 Project Plan 类库(类似于 MS Project 的工作方式)。这个类库有一个Task 对象(等等)。
Task 对象具有 EstimatedHours (Double)、StartDate (DateTime) 和 EndDate (DateTime) 等属性。一个Task 对象可以有一个父Task 和多个子Task 对象。有孩子(是父母)的Task 的EstimatedHours、StartDate 和EndDate 属性取决于其直系孩子的这些属性。父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
【问题讨论】:
标签: .net oop class-hierarchy