Symfony2 DIC とセマンティック コンフィギュレーションについて多くのことを読んだ後、私は自問自答しました。
シナリオ
「管理ダッシュボード ディスパッチャ」のようなサービスを作成したいとします。
これは、CRUD を実行したいエンティティがいくつかあることを意味します。私がやりたくないのは、プロジェクト内のすべてのエンティティのルート - >アクション - >ロジックの組み合わせです。これは、そのように、オブジェクトごとに次のように記述する必要があるためです。
- /追加/エンティティ
- addEntityAction
- エンティティロジック
もちろん、「エンティティ」はオブジェクト内のエンティティの名前です。
アクション (追加-削除-編集) に応答するサービス (ディスパッチャーなど) を構築していますが、それはパラメーター化されています: アドレスバーに/add/entityA
orのようなものを書き込み/add/entityB
、そのルートが同じアクションにつながります (もちろん)エンティティ名でサービスを思い出しました。
この時点で、私のサービスは、オブジェクト内のエンティティの EntityClass、FormTypeClass、およびテンプレート ファイルが何であるかを知ることができるはずです。
そして、ここに私の精神的混乱が来ます
次のphp配列のような予備構成を行う必要があります(これは単なる例です)
array(
'EntityA'=>array(
'class'=>'BundleName/Entity/EntityA',
'form'=>'BundleName/Form/entityAType',
'template'=>'EntityATemplate'),
'EntityB'=>array(
'class'=>'BundleName/Entity/EntityB',
'form'=>'BundleName/Form/entityBType',
'template'=>'EntityBTemplate'),
[...]
);
または同等のもの。
しかし ....
私と私のチームだけがこのバンドルを使用することを考慮して、このシナリオのベスト プラクティスは何ですか?
最初の解決策
parameters.php
いくつかの定数または静的メンバーを定義したファイルを使用する
2 番目の解決策
マップ (前の配列など) をサービスに直接使用する
3番目の解決策
バンドルにセマンティック構成を使用し、拡張クラスを定義するなど
正直なところ、どちらが良いとは言えません。明らかに、最初のものと 3 番目のものは 2 番目のものよりも優れています。
最初のソリューションは symfony2 の哲学を壊しましたが、唯一の方法のようです。なぜなら、2 番目のソリューションは、私の DIC で直接処理される、または構成階層を持つために (カスケード方式で) いくつかのサービスの作成をトリガーする必要がある場合にのみ役立つように思われるからです。複数の構成ファイルをマージするため、または(おそらくサードパーティのバンドルにとって最も重要な)構成で何らかの検証を行うため。ファイル
あなたの意見は何ですか?これを行うための他の方法がいくつかありますか、それとも単純に 3 番目の解決策を好みますか? 私はあなたの意見を知りたいです。
編集:明らかに、ビルダー注入またはセッター注入を使用できますが、「DIC」セクションと見なします(したがって、3番目のソリューション)