私が理解しているように、バンドルは機能を分離することです。UserBundle
&があるとしBlogBundle
ます。次に、を参照BlogBundle:Post
するauthor
フィールドが作成されますUserBundle:User
。それはバンドルの目的に反していませんか? 別のものを交換することはできUserBundle
ませんか?どうすれば適切な方法で行うことができますか?それとも、これが最善ですか?
3 に答える
バンドル間の依存関係が気に入らない場合 (個人的には同意します)、任意のバンドルの外部でモデルを作成できます。これは次のように構成できます…</p>
doctrine_mongodb:
document_managers:
default:
mappings:
model:
type: annotation
dir: %kernel.root_dir%/../src/MyApp/Model
prefix: MyApp\Model\
alias: Model
ORM の構成も同様です。
バンドルは機能を可能な限り分離することを目的としていますが、それは一部が他の機能に依存しないという意味ではありません。
スタンドアローンのライブラリであるはずの Symfony2 のコンポーネントにも依存関係があるのは興味深いと思います。たとえば、クラスはおよびコンポーネントのHttpKernel
クラスに依存します。HttpFoundation
EventDispatcher
あなたの例では、別の をスワップする必要がある場合はUserBundle
、必要な手順を実行して、BlogBundle
の依存関係がまだ満たされていることを確認する必要があります。これは、リファクタリングが必要であることを意味する場合があります。
したがって、一方が他方を参照するため、バンドルの目的が無効になることはありません。バンドルは、常に 100% 切り離されているとは限らない場合でも、使用するのに有利です。
別のアプリケーションのコンテキストでは、特定のブログ投稿をグループではなく個人/ユーザーにバインドしたくない場合があります。コードの移植性を最大限に保つには、シナリオを少し抽象化する必要があると思います。関係は受け入れられないでしょう。一方、所有者のアイデンティティはです。
特定のブログ投稿に所有者がいるとします。独自のバンドルを持つ別のアプリケーションのコンテキストでは、所有者 ID はグループ、ユーザー、外部ソースなどである可能性があります。
私見では、記事を書いた「人」のIDのみを使用する必要があり、これがローカルデータベースの「人」であることを意味する実装を制限する必要はありません。