一个 ZF2 系统中有许多组件。每个组件都有自己的表示层、业务层和数据层。问题是当组件 Foo 有一个使用组件 Bar 的数据层的控制器时。
例子:
<inside modules, each module can be individually deployed or removed>
\modules
\Foo ; one module (this directory) can be added or removed
\view ; presentation layer (view) for all subcomponents
\Subcomponent1
\Action1
\Subcomponent2
\Action2
...
\src
\Subcomponent1
\Entity ; data layer (model)
\Controller ; business layer (controller)
\Service ; service layer (service)
\Subcomponent2
\Entity
\Controller
\Service
\Subcomponent3
...
\Bar
\view
...
\src
\Subcomponent1
...
\Baz
\src
\Subcomponent1
...
子组件与来自其他子组件的实体强耦合,通常来自完全不同的组件。控制器和服务就是这种情况。这可以解决吗?
Foo\Subcomponent1 有一个 FooSub1Service,它使用 Bar\Subcomponent1 中的实体来处理传递的数据并将它们导入数据库。Baz\Subcomponent1 有一个 AuthenticationService,它使用 Bar\Subcomponent1 实体通过 ID 等查找用户。
我知道依赖注入,但在这种情况下,每个子组件中都有 EntityManager,它被指示按名称和 PK 查找实体,即 find("Bar\Subcomponent1\Entity\User", 123)。而且,在持久化实体时,我必须实例化任何具有外键的东西,即 UserAddress 并将其添加到 User。每次我调用 x = new NameOfEntity() 时,我都会将子组件与子组件中的某个实体紧密耦合,通常来自不同的系统模块。