我正在编写一个包含Reactor和Zone对象的应用程序。每个Reactor都有可变数量的区域,并将它们存储在名为_zones的私有字段中。
反过来,每个区域必须知道它属于哪个Reactor,因此它在私有字段中存储指向其反应堆的指针。我通过将reactor对象传递给Zone构造函数来分配此字段。
以下是示例代码:
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
我的问题是:由于每个区域都需要将一个反应堆传递给它的构造函数,你认为这两种方法中的哪一种更好:
仅使用Reactor中的方法创建区域。
Public Class Reactor
Private _zones As New List(Of Zone)
Public Sub CreateZone()
_zones.Add(New Zone(Me))
End Sub
End Class
创建区域并将它们添加到反应堆
Public Class Reactor
Private _zones As New List(Of Zone)
Public Sub AddZone(ByVal z As Zone)
_zones.Add(z)
End Sub
End Class
我认为所选择的选项取决于具体情况,但我想知道其中一个选项是否通常被视为最佳实践。此外,任何有关类似案件的经验都非常有用。
谢谢!
答案 0 :(得分:1)
我想说第一个选项是首选。第二种方法的问题是可以创建Zone
,在其构造函数中赋予它reactorA
,然后将其添加到reactorB
。或者,您可以将相同的Zone
添加到两个不同的Reactor
对象中。您当然可以为此添加错误检查,并在不匹配的情况下抛出异常,但只要设计需要父/子关系,您就永远不可能处于需要创建的位置Zone
,但您无法访问其Reactor
。只要您在需要创建Reactor
时可能始终可以访问Zone
,那么就没有理由不通过在{{中添加“create”方法来封装它。 1}}类。
例如,我创建了一个网格对象,它定义了要打印到页面或屏幕的网格表。它包含行列表,每行包含一个单元格列表。这些行需要一个引用回到它们的网格,并且单元格需要一个引用回到它们的行。所以,我只是以一种方式实现它,你告诉网格你要添加一行并给它大小,如下所示:
Reactor
myGrid.Rows.Add(100)
方法返回Row对象,因此您可以像这样轻松地获取它:
Add
这种设计非常适合这种特殊情况。因为我不太可能需要在一个我不会引用父网格的地方创建一行,所以它很容易使用。
如果您遇到需要能够独立创建Dim row As GridRow = myGrid.Rows.Add(100)
row.PenWidthTop = 1
个对象,然后再将其添加到Zone
的情况,您可以随时将其添加为辅助选项。没有任何关于第一种方法阻止您在以后添加第二种方法。例如,您可以使Reactor
个对象允许自己在没有父Zone
的情况下创建,然后,当它们被添加到Reactor
时,Reactor
可以在Reactor
上设置一个属性,告诉它父亲Zone
是谁。你可以让Reactor
类的ParentReactor
属性抛出一个例外,如果你之前已经设置了它就试着改变它,如下所示:
Zone