【发布时间】:2011-06-11 08:34:22
【问题描述】:
我正在使用 OO PHP 开发一个社交网络类型的项目,我不想使用现有的框架。做这个项目的主要目的是帮助我了解更多的东西。
这个问题更多的是关于依赖注入。
假设我有这些课程:
核心类 - 一些在应用程序中执行操作的核心方法
配置类 - 加载站点配置内容
数据库类 - 连接到 mysql 并执行所有与数据库相关的工作
记录器类 - 用于记录错误和调试信息
验证码类 - 用于表单上的验证码
会话类 - 启动会话开始并添加、删除、获取要在应用中使用的会话变量
缓存类 - 类似于会话类,但用于缓存项目(文件缓存、memcache、apc 缓存。我什至可以将我的会话内容添加到此类中,因为所有这些缓存都可以使用相同类型的方法)
上述所有类很可能会在我的应用程序的每个页面加载时使用(我可能错过了稍后将添加的更多类)
现在除了需要注入到大多数其他类中的上述类之外,我还有更多的类。我将有一个称为模块的部分,其中包含...
帐户类 - 创建新用户、验证用户身份、让用户进出应用、更新用户设置等等。
用户类 -显示用户个人资料、在线显示用户、新用户以及所有向网站用户显示的内容
论坛类 - 将用于论坛部分
博客类 - 用于博客部分
照片类 - 所有照片相关的东西
cmets 类 - 处理照片和个人资料的 cmets
对于网站的不同部分,将会有更多此类类型的课程。
上面列出的第二组类很可能需要将第一组中的大多数类注入其中。
那么我是否应该使用注册表来存储第一组类中的对象并将注册表注入到第二组类中的所有类对象中?
或者我应该使用构造函数来加载它们吗?在此示例中,将有 7 个对象注入到其他类中,这似乎很多。我要解决这个问题了吗?
---编辑---
我知道单例模式,但我认为这不是我最好的选择
---编辑 2---
正如一些人所提到的,需要传递多达 7 个对象确实看起来很多,这就是我寻找建议的原因。对我来说幸运的是,这个项目还处于起步阶段,所以现在是改变结构的时候了。
我的论坛部分中的课程就是一个例子。论坛类需要访问会话数据、可能的缓存数据、配置对象、数据库对象。我是不是走错路了?
【问题讨论】:
-
删除了我的回复,因为你也提到了。使用注册表模式。
-
如果您的对象需要注入 7 个对象才能正常工作,我会挑战这些类本身的底层架构。理想情况下,您应该只需要几个对象。或者,依赖注入容器可以减轻你的一些压力..就我个人而言,我不是粉丝。
-
@CaseySoftware 这也是我的想法,但我不确定
-
你有没有想过使用 Context 来传递对象,比如
new Context($db,$logger,$session,$filter),然后做new Account($Context)?
标签: php dependency-injection dependencies registry