如何使用依赖注入创建业务层对象?

时间:2012-02-02 22:27:11

标签: php design-patterns dependency-injection

我的目标是尽可能地将我的框架与我的应用程序分离(虽然我知道它并非完全可能)。

我在我的应用程序中使用了几种不同的常见类型的模型...映射器,数据对象和值对象。例如,UserMapper获取一个UserData对象并从数据库中收集信息,然后将其映射到UserValue对象,以便在Controller中使用。

这意味着这些模型具有以下依赖关系:

  1. UserMapper:需要UserData,以及构建UserValue(s)的方法
  2. UserData:需要Db(来自框架)
  3. UserValue:什么都不需要
  4. 我是否在我的框架的DIC方法中包含了创建Mapper对象,Data对象和Value对象,以便依赖可以自动注入?或者我是否创建了一个单独的DIC / Factory来处理业务层的东西?

1 个答案:

答案 0 :(得分:0)

依赖注入容器可以处理所有对象的创建。这包括使用工厂创建使用工厂模式的特定对象的DIC。

我喜欢用创建对象的闭包来加载我的DIC。这样,只有在请求时才会延迟加载所有对象,但在创建对象时我仍然可以拥有很大的灵活性。

您可以编写一种方式,为datamapper提供一个空的uservalue对象,然后根据DB数据初始化对象的数据。另一种方法是在datamapper和uservalue类之间建立紧密耦合,让它自己创建另一个。

尝试将框架与业务逻辑分开并不意味着不允许两者接触,只是没有业务逻辑代码进入框架的代码。使用DIC创建用于业务逻辑的对象并不意味着您的DIC中存在业务逻辑。