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

依赖注入 – 我的Factory对象是否引入了全局状态?

发布时间:2020-12-14 04:56:14 所属栏目:百科 来源:网络整理
导读:所以,这是交易.我设法在不使用全局变量或静态类/函数的情况下创建框架. 我正在使用一种使用Factory的依赖注入形式.由于框架将用于各种事情,我正在创建一个更通用的工厂,它将构建您的类,并以递归方式依赖它. 为了节省内存,每次对象被实例化时,Factory都会存储
所以,这是交易.我设法在不使用全局变量或静态类/函数的情况下创建框架.

我正在使用一种使用Factory的依赖注入形式.由于框架将用于各种事情,我正在创建一个更通用的工厂,它将构建您的类,并以递归方式依赖它.

为了节省内存,每次对象被实例化时,Factory都会存储对它的引用,因此如果另一个对象具有对该对象的依赖关系,Factory将只需要返回引用.这样我们就不需要两次实例化同一个对象了.

这意味着,在许多类中,我们将对同一对象有许多不同的引用.例如,如果我声明Blog_model,Blog_controller,Blog_view,Form_validation需要Config对象,则每个实例都将使用对同一Config对象的引用进行实例化,尽管是注入.

我不熟悉单元测试或任何类型的自动测试.我刚刚发现使用全局变量和静态都很糟糕(这就是为什么我要重写我使用的框架).我想问的是,这会引入全球状态吗?它是否以任何方式妨碍测试?

—-更新——

这是一个用PHP编写的MVC框架.

解决方法

至于我读到这个问题,你基本上创建了一个只支持单一生活方式的依赖注入容器.

与DI密切相关的是终身管理的概念.如果我们多次要求特定类型的实例,我们每次都会得到相同的引用,或者每次都得到一个新的实例?

如果我们每次称之为Singleton生活方式时都会得到相同的实例 – 不要与Singleton设计模式混淆.

如果我们每次称之为瞬态生活方式,我们都会得到一个新实例.

还有其他类型的生活方式,如范围,汇集等,但上述两种是最基本的生活方式.

听起来我的DI容器只支持Singleton的生活方式.这与Global状态不同,但是在容器的单个实例中共享状态.但是,如果你丢弃容器实例,你也会抛弃共享状态,所以摆脱全局状态要容易得多.

(编辑:李大同)

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

    推荐文章
      热点阅读