2011-09-06 7 views
8

私のアプリケーションバンドルでは、コントローラでもモデルでもないクラスがいくつか必要になります。例えば、 "skill"、 "efficiency"、 "beauty"などのメンバーを持つscorecardクラスを持っています。また、 "meanScore"のようなメンバーメソッド/ゲッターを持つかもしれません。Symfonyでは、コントローラもモデルでもないクラスはどこに置くのですか?

このようなクラスはどこでsymfonyフレームワークに入りますか?

答えて

8

@Gordonによると、これはビジネスオブジェクトのように聞こえることに同意します。しかし、そうでないと確信しているなら、次のステップはどのように分類するのかを理解することです。それはヘルパーですか?イベントリスナー?ユーティリティクラスですか?一度それを理解したら、自分自身に質問してください:それはバンドルに固有なのでしょうか、それともプロジェクトの中でそれを再利用しようとしていますか?

イベントリスナーで、バンドルに属しているとします。 MyBundle/EventListenerに入れてください。それが助手なら、MyBundle/Helperに入れてください。今、あなたがそれを再利用することを計画しているのであれば、それは実際にはそれのようには聞こえませんが、私に負担してください...)あなたはそれのためにvendorの場所を作る方が良いかもしれません。

覚えておくべき重要なことは、Symfony2は非常に若いため、これらのような質問に答えるベストプラクティスの明確なリストは実際にありません。今は、何が効果的で、何が効果がないかを見るのは、私たちの責任です。それは野生の西のようです:)

2

このクラスは、ドメインのビジネスオブジェクトを表しているため、モデルに属しています。

+0

ビジネスオブジェクトではない場合はどうですか。 2つのメンバー 'name'と 'href'を持つ 'breadcrumb'クラスがあるとしますか? –

+0

@Robert SymfonyとTwigがそれをどこに置くかわかりません。私はまだモデルに入れていますが、ドメインのレイヤーではありませんが、一般的なアプリケーションレイヤーはUIの一部です。または、再利用可能な場合は、フレームワーク/ libフォルダのいくつかの並べ替えに入れたい – Gordon

3

私は自分自身のためにこれらの種類の質問に答える方法は私はKnpBundlesに行き、他の開発者がそれをやっている方法を確認します。

もう1つ注目すべきことは、Symfony2は設定に関して自由度があることです。正しく設定している限り、すべてのSymfony2カーネルケア用にRandomフォルダにすべてをスティックすることができます。まあ、おそらく極端にそれを取るかもしれませんが、例えばListenerまたはEventListener - 違いはありません。あなたは私に言わせれたい場合

今、私はScorecardのためにそれを言うだろう - あなたはそれを使用するつもりだ場所に応じて、どちらかServiceまたはbreadcrumbについて

Helper/Utilは - 良い例のように思えます小枝の延長のために。

+0

私はそれがサービスだと思いません。サービスは通常、Domainオブジェクトの公開APIを呼び出して計算を行います。彼らはめったに自分の状態( "スキル"、 "効率"、 "美")をカプセル化しません。それらはUIのような外部層とドメイン層の間の薄いメディエーター層のようなものです。 – Gordon