2012-04-05 10 views
11

私はSymfony2で開発されたアプリケーションを持っています。次のように今それのための構造は次のとおりです。Symfony2バンドル:私はそれらを正しく使用していますか?

  • FrontBundle - アプリケーションのビューとUIに関連するすべてのものを含んでいます。
  • PersistanceBundle - アプリケーションの永続性レイヤに関連するすべてを含みます。
  • DomainBundle - アプリケーションとサービスのエンティティに関連するすべてを含みます。

この構造は大丈夫ですか?またはバンドルは、フォーラムの機能と同じように使用されている - ForumBundle - フォーラムに関連する(コントローラサービスドメインロジック持続)すべての層を含みます。

+0

です。私はバンドルelnurの話をacros来ていない。そこで私は[best-practice-bundle](https://github.com/LilaConcepts/best-practice-bundle)と呼ばれる独自のバンドル(現在alpthaにあります)を作成しました。これは[packagist](http:// packagist。 org/packages/lilaconcepts/best-practice-bundle)を参照してください。私は「ディレクトリツリー構造」や「コーディング標準」のようなベストプラクティスに従おうとしました。希望があれば、フィードバックは大歓迎です。 –

答えて

17

バンドルを使用してアプリケーションを構築する方法についての厳しい規則はありませんが、Symfony2を1年近く使って開発したものです。

アプリケーション固有のバンドルを1つ使用します。 AppBundle - まず、終わりではないので、便利であることが証明などCommonBundleUserBundleMainBundleBlogBundleContactBundleのような複数のバンドル、と私startedは、私はちょうど1つのアプリの特定のバンドルを切り替えます。

サブネームスペースを使用してコードを整然と整理できます。たとえば、バックエンドコントローラはAppBundle\Controller\Backendサブネームスペースに移動します。

アプリの具体的な意味はです。具体的なアプリに固有のもので、他の場所で再利用することはできません。再利用可能なもの用に別々のバンドルを開発し、それらをベンダのインフラストラクチャに入れることができます。

Symfony以外のものはバンドルから外してください。モデルのバンドルと、バンドル内のService Layerクラスが、Symfony2に固有でない場合は、バンドルを持つ必要はありません。詳細については、this questionと私の答えを参照してください。

+0

"Symfony以外のものは束ねないようにしてください。"どこにそれを保つのですか? – meze

+0

を 'src/MyVendor/Model'あるいは' vendor/MyVendor/Model'に追加し、これらの名前空間をオートローダーに追加します。 – noisebleed

2

プロジェクトのアプリケーション構造を整理する方法はいくつかあります。しかし、あなたのバンドルを配布してsymfonyのベストプラクティスに従ったければ、バンドルはUIの分離よりも多くの機能です。 documentationで読み取ったバンドルの詳細。

私は、有効な両方の以下の構造を持つ2つのプロジェクト、私が考える持っている:一般的なものが含まれているBlogBu​​ndle、StoreBundleなど、 とAppBundle:

  1. は、各機能のバンドルを作っています。バックエンド/フロントエンドなし 分離。ほとんどの場合バックエンドがフロントエンドになっているのはSaaSです。
  2. フロントエンド用に1つのバンドル、バックエンド用に1つのバンドル。それらはエンティティ とドメイン固有のものだけを共有します。アプリケーションには2つの異なる目的があります。
5

Elnurと同じように、AppBundleを使用するのが良い方法です。

バンドルはMVCパターン自体を実装しているので、バンドルを使用してレイヤーを分離するのは良い考えではないと思います。

私はバンドルを使う最良の方法は "オープンソース"と考えることだと思います。開発している機能がすべての人に公開される、または将来のプロジェクトで再利用されるほどの汎用性がある場合は、この機能をバンドルに入れます。 このようにすると、AppBundleに属するビジネスルールなしで機能をビルドする必要があります。

バンドルは、同じ質問自分で苦労レンガ

関連する問題