delphi – 如果一个对象知道很多它的拥有者,这是一个代码味道吗?

delphi – 如果一个对象知道很多它的拥有者,这是一个代码味道吗?,第1张

概述在我们的Delphi 2007应用程序中,我们使用了很多以下结构 FdmBasic:=TdmBasicData(FindOwnerClass(AOwner,TdmBasicData)); FindOwnerClass向上移动当前组件的Owner层次结构以查找特定类(在示例中为TdmBasicData).生成的对象存储在Field变量FdmBasic中.我们主要使用它来传递数据模块. 例: 生成报告 在我们的Delphi 2007应用程序中,我们使用了很多以下结构

FdmBasic:=TdmBasicdata(FindOwnerClass(AOwner,TdmBasicdata));

FindOwnerClass向上移动当前组件的Owner层次结构以查找特定类(在示例中为TdmBasicdata).生成的对象存储在FIEld变量FdmBasic中.我们主要使用它来传递数据模块.

例:
生成报告时,生成的数据将被压缩并存储在通过数据模块TdmReportBaseData访问的表的Blob字段中.在我们的应用程序的单独模块中,有一些功能可以使用ReportBuilder以分页形式显示报表中的数据.此模块的主代码(TdmRBReport)使用类TRBTempdatabase将压缩的blob数据转换为可在Reportbuilder运行时报表设计器中使用的不同表.
TdmRBReport可以访问TdmReportBaseData以获取各种与报告相关的数据(报告类型,报告计算设置等). TRBTempDatabase在TdmRBReport中构建,但必须能够访问TdmReportBasedata.所以现在使用上面的结构完成:

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在评论中指出的那样,这可能会使测试变得更容易.

总结

以上是内存溢出为你收集整理的delphi – 如果一个对象知道很多它的拥有者,这是一个代码味道吗?全部内容,希望文章能够帮你解决delphi – 如果一个对象知道很多它的拥有者,这是一个代码味道吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1258770.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存