加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi,依赖注入和内存管理

发布时间:2020-12-15 09:39:44 所属栏目:大数据 来源:网络整理
导读:在尝试编写可测试代码时,Dependency Injection肯定是最重要的概念之一.但是,虽然Java和C#具有垃圾收集功能,但Delphi没有并且通常使用所有权原则来管理对象处理(创建对象的人会破坏它). try..finally构造很好地支持了这一点 Obj := TObject.Create;try ...fin
在尝试编写可测试代码时,Dependency Injection肯定是最重要的概念之一.但是,虽然Java和C#具有垃圾收集功能,但Delphi没有并且通常使用所有权原则来管理对象处理(创建对象的人会破坏它). try..finally构造很好地支持了这一点

Obj := TObject.Create;
try
  ...
finally
  Obj.Free;
end;

现在如果使用依赖注入怎么办:

constructor TFileLister.Create(FileSystem: TFileSystem);

谁应该负责销毁FileSystem对象?所有权原则在这里仍然有效吗?

我知道接口是这个问题的解决方案(感谢它们是引用计数的事实).但是,如果没有接口(比如在一些遗留代码中)呢?在使用依赖注入时,还有哪些其他方法或最佳实践来处理内存管理?

解决方法

您必须为FileSystem对象提供所有者.这可以是创建TFileLister实例的实体,也可以将所有权传递给文件列表器,记录它将释放传递给构造函数的文件系统.

正确的方法取决于您的特定应用程序.例如,如果其他对象也将使用相同的文件系统对象,则它不应由其中一个(例如文件列表器)拥有,而是由将它们连接在一起的对象拥有.如果只有一个文件系统对象才有意义,你甚至可以使文件系统对象全局化.

简而言之,你需要做一些比Java更多的思考,但这不一定是坏事.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读