TruckStop有一个List(of TruckClass)和一个名为Weigh()的方法。 TruckClass需要调用Weigh()。以下两种设计的优点/缺点是什么? TruckClass引用TruckStopClass并调用MyTruckStopClassReference.Weigh()Vs. TruckClass提升由TruckStopClass处理的TruckClass.Weigh事件。
我已经读过彼此引用的对象不会影响GC,但是需要在每个TruckClass中提供额外的引用。在硬币的另一面,我已经读过,事件处理程序也是引用,如果你不解开它们可能会导致问题。关于此事的利弊/最佳做法/意见的一点清晰度或评论将不胜感激。
答案 0 :(得分:0)
就这两种方法而言,我更倾向于倾向于两个类别,而不是由事件/处理程序捆绑在一起。在这个理论案例中,我将称重功能放在卡车停止等级的模块或共用功能内,并将卡车作为参数。
如果您打算参加活动路线,那么让一个班级处理在单独班级中举办的活动并不是一种非常可取的做事方式。在我个人看来,如果我这样做,我会觉得非常肮脏,因为这会导致两个类紧密耦合,至少感觉你是在屠杀OOP设计。
我在过去做的事情是在处理可以从多个位置调用相同表单的程序时整合表单初始化,它具有可以启动表单的所有可能位置将事件引发到公共容器,无论是基本表单或容器类或沿着这些行的东西,然后在该父表单/类/容器上我处理来自所有子项的每个事件。关于这一点的好处是你可以通过调用表单初始化程序的一个子过程(或函数,但是你想定义它)来处理所有事件,如果你需要更改表单的创建方式并将其全部显示在一个地方。
此示例与您的示例并不严格相关,但如果您稍微更改示例并说两个类都可以导致某些车辆被称重,那么将接入点集中到卡车停止的称重功能将使管理项目变得更加容易。
答案 1 :(得分:-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))