我在写一个有反应堆和区域对象的应用程序。每个反应堆都有可变数量的区域,并将它们存储在一个名为_zones的私有区域中。
反过来,每个区域都必须知道它属于哪个反应堆,因此它在一个专用的领域中存储了一个指向其反应堆的指针。我通过将一个反应堆对象传递到区域构造函数来分配这个字段。
下面是示例代码:
Public Class Reactor
Private _zones As New List(Of Zone)
End Class
Public Class Zone
Private _reactor As Reactor
Public Sub New(ByVal reactor As Reactor)
_reactor = reactor
End Sub
End Class我的问题是:由于每个区域都需要将一个反应堆传递给其构造器,您认为这两种方法中哪一种更好:
我认为所选择的方案取决于具体情况,但我想知道这些选择之一是否普遍被视为最佳做法。此外,任何有关类似案件的经验都将非常有用。
谢谢!
发布于 2014-01-23 13:27:00
我想说的是,第一种选择是可取的。第二种方法的问题是,可以创建一个Zone,在构造函数中给它reactorA,然后将它添加到reactorB中。或者,可以将相同的Zone添加到两个不同的Reactor对象中。当然,您可以为此添加错误检查并在不匹配的情况下抛出异常,但只要设计需要父/子关系,您就不可能处于需要创建Zone的位置,但您无法访问它的Reactor。只要您在需要创建Reactor时总是能够访问Zone,那么就没有理由不将" create“方法封装在Reactor类中。
例如,我创建了一个网格对象,它定义了要打印到页面或屏幕上的网格表。它包含一个行列表,每个行都包含一个单元格列表。行需要对其网格的引用,单元格需要对其行的引用。所以,我只是以这样一种方式实现了它:告诉网格,您想要添加一行并给它大小,如下所示:
myGrid.Rows.Add(100)Add方法返回Row对象,因此您可以像这样轻松地获得它:
Dim row As GridRow = myGrid.Rows.Add(100)
row.PenWidthTop = 1这种设计在那种特殊情况下效果很好。由于我不太可能需要在一个没有引用父网格的地方创建行,这使得它更容易使用。
如果遇到需要独立创建Zone对象的情况,然后稍后将它们添加到Reactor中,则始终可以将其添加为次要选项。关于第一个方法,没有什么可以阻止您在以后添加第二个方法。例如,您可以使Zone对象允许在没有父Reactor的情况下创建自己,然后,当它们被添加到Reactor时,Reactor可以在Zone上设置一个属性,以告诉它它的父Reactor是谁。如果在前面已经设置了ParentReactor属性之后尝试更改它,则可以让Zone类上的Zone属性抛出一个异常,如下所示:
Public Class Zone
Public Sub New()
End Sub
Public Sub New(parentReactor As Reactor)
_parentReactor = parentReactor
End Sub
Private _parentReactor As Reactor
Public Property ParentReactor As Reactor
Get
Return _parentReactor
End Get
Set(value As Reactor)
If _parentReactor IsNot Nothing Then
Throw New Exception("This zone has already been added to a Reactor")
End If
_parentReactor = value
End Set
End Property
' ...
End Classhttps://stackoverflow.com/questions/21308881
复制相似问题