Ваша задача - создать библиотеку классов Project Plan, которая поддерживает отслеживание задач (подобно тому, как работает 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