1つの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のエンティティを使用して、渡されたデータを処理し、DBにインポートします。Baz \ Subcomponent1には、Bar\Subcomponent1エンティティを使用してIDなどでユーザーを検索するAuthenticationServiceがあります。
私は依存性注入を知っていますが、この場合、すべてのサブコンポーネントにEntityManagerがあり、名前とPK、つまりfind( "Bar \ Subcomponent1 \ Entity \ User"、123)でエンティティを検索するように指示されています。また、エンティティを永続化するときは、外部キーを持つもの、つまりUserAddressをインスタンス化して、それをUserに追加する必要があります。x = new NameOfEntity()を呼び出すたびに、サブコンポーネントを、多くの場合別のシステムモジュールからのサブコンポーネントのエンティティと緊密に結合します。