gpt4 book ai didi

.NET 对象层次结构 - 事件或不事件

转载 作者:行者123 更新时间:2023-12-04 23:11:10 25 4
gpt4 key购买 nike

你的工作是设计一个支持任务跟踪的项目计划类库(类似于 MS Project 的工作方式)。这个类库有一个 Task对象(除其他外)。
Task对象有一个 EstimatedHours ( Double ), StartDate ( DateTime ) 和 EndDate ( DateTime ) 属性等。一个 Task对象可以有一个父对象 Task和几个 child Task对象。 EstimatedHours , StartDate , 和 EndDate Task 的属性有 child 的(是 parent )取决于其直接 child 的那些属性。家长 TaskStartDate是最早的StartDate它的 children 。家长 TaskEndDate是最新的EndDate它的 children 。家长 TaskEstimatedHours是其子项 EstimatedHours 的总和.因此,在 Task 上更改这些属性是无效的。其中有 child 。

您将如何处理在具有父级的任务上更改 EstimatedHours、StartDate 或 EndDate 的用例? (父级的属性是其子级的反射(reflect),因此对子级的任何更改都可能需要调整父级的属性以适本地反射(reflect)更改)

一种选择是在每个属性更改时设置一个事件。一位家长 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

最佳答案

解决这个问题的正确方法是使用观察者设计模式。实现观察者模式的详细解释超出了本讨论的范围。但是这里有一些关于观察者模式的很好的链接。一个链接是here另一个是 here .
http://www.dofactory.com/Patterns/PatternObserver.aspx
http://en.wikipedia.org/wiki/Observer_pattern

关于.NET 对象层次结构 - 事件或不事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/747455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com