あなたの仕事は、タスクの追跡をサポートする Project Plan クラス ライブラリを設計することです (MS Project の仕組みに似ています)。このクラス ライブラリには、Task(とりわけ) オブジェクトがあります。
TaskオブジェクトにはEstimatedHours( Double)、StartDate( DateTime)、EndDate( ) などのDateTimeプロパティがあります。Taskオブジェクトは、1 つの親オブジェクトTaskと複数の子オブジェクトを持つことができTaskます。子を持つ (親である)のEstimatedHours、StartDate、およびEndDateプロパティはTask、直接の子のプロパティに依存します。親Taskのは、その子の中でStartDate最も古いものです。StartDate親はその子の最新Taskのものです。親のは、その子の の合計です。したがって、子を持つ でこれらのプロパティを変更することは無効です。EndDateEndDateTaskEstimatedHoursEstimatedHoursTask
親を持つタスクで、EstimatedHours、StartDate、または EndDate が変更されるユース ケースをどのように処理しますか? (親のプロパティはその子を反映しているため、子を変更する場合は、変更を適切に反映するために親のプロパティを調整する必要がある場合があります)
1 つのオプションは、各プロパティが変更されたときのイベントを作成することです。親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