delphi – 如果一个对象知道很多它的拥有者,这是一个代码味道吗
在我们的Delphi 2007应用程序中,我们使用了很多以下结构
FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData)); FindOwnerClass向上移动当前组件的Owner层次结构以查找特定类(在示例中为TdmBasicData).生成的对象存储在Field变量FdmBasic中.我们主要使用它来传递数据模块. 例: constructor TRBTempDatabase.Create(aOwner: TComponent); begin inherited Create(aOwner); FdmReportBaseData := TdmRBReport(FindOwnerClass(Owner,TdmRBReport)).dmReportBaseData; end;{- .Create } 我的感觉是,这意味着TRBTempDatabase知道很多它的拥有者,我想知道这是某种代码气味还是反模式. 你对此有何看法?这是代码味吗?如果是这样,有什么更好的方法? 解决方法
在这里给出的描述中,我认为这是有点臭.但是,它似乎很容易修复.
我倾向于将dmReportBaseData对象传递给任何需要它的组件的构造函数.这使合同在编译时变得清晰,而不是像目前那样在运行时强制执行. 按照目前的情况,您执行的合同比您需要的更强.虽然TRBTempDatabase只需要一个dmReportBaseData实例,但它只有在可以从TdmRBReport报表对象获取该实例时才会起作用. 进行此更改还将允许TRBTempDatabase和TdmRBReport进行离婚并仍然可以成功运行.正如@Lieven在评论中指出的那样,这可能会使测试变得更容易. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |