0

TruckStop 有一个 List(of TruckClass) 和一个名为 Weigh() 的方法。TruckClass 需要调用 Weigh()。以下两种设计的优缺点是什么?TruckClass 具有对 TruckStopClass 的引用并调用 MyTruckStopClassReference.Weigh() 与。TruckClass 引发由 TruckStopClass 处理的 TruckClass.Weigh 事件。

我读过相互引用的对象不会影响 GC,但它需要每个 TruckClass 中的额外引用。在硬币的另一面,我读到事件处理程序也是引用,如果你不解开它们可能会导致问题。对此事的利弊/最佳实践/意见进行一点澄清或评论将不胜感激。

4

2 回答 2

0

就这两种方法而言,我更倾向于倾向于这两个类是独立的,而不是被事件/处理程序捆绑在一起。在这个理论案例中,我会将称重函数放在模块内或卡车停靠站类的共享函数中,并将卡车作为参数。

如果您要走事件路线,那么让一个班级处理在单独班级中引发的事件并不是一种非常可取的做事方式。而且在我个人看来,如果我这样做了,我会觉得很肮脏,因为这会导致两个类紧密耦合,至少会让人觉得你在扼杀 OOP 设计。

在处理可以从多个位置调用相同表单的程序时,我过去为整合表单初始化所做的事情是让所有可以启动表单的可能位置将事件引发到公共容器,无论是基本表单还是一个容器类或类似的东西,然后在那个父表单/类/容器上,我处理来自所有孩子的每个事件。这样做的好处是您可以让一个调用表单初始化程序的子过程(或函数,但是您想定义它)处理所有事件,并且如果您需要更改表单的创建方式并将其全部显示在一个地方。

此示例与您的示例并不严格相关,但是如果您稍微更改示例并说两个类都可以导致某些车辆被称重,那么将访问点集中到卡车停靠站的称重功能将使项目管理变得更加容易.

于 2013-01-09T21:18:56.697 回答
-1

我的解决方案是在 TruckStop 类中同时包含 TruckClass 和 Weigh() 方法。就像是:

Class TruckStop
    Class Truck
        (private attributes)
        (public properties)
    End Class

    Public Shared Function Weigh(truck) as Weight
        (code)
    End Function
End Class

和这样的参考:

weight = thisTruckStop.weigh(thisTruckStop.Truck(truckNum))
于 2013-01-09T20:32:40.693 回答