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


How to create Business Layer object with Dependency Injection?

我的目标是让我的框架尽可能地与应用程序解耦(尽管我知道这并不完全可能)。

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

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

  1. UserMapper:需要UserData和一种生成UserValue的方法
  2. UserData:需要Db(来自框架)
  3. UserValue:不需要任何东西

我是否在框架的DIC方法中包括创建Mapper对象、Data对象和Value对象的方法,以便可以自动注入依赖关系?或者我应该创建一个单独的DIC/Factory来处理业务层的东西吗?

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

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

您可以这样写:数据映射器被赋予一个空白的uservalue对象,然后根据DB数据初始化对象的数据。另一种选择是让datamapper和uservalue类自己创建另一个,从而在它们之间创建紧密耦合。

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