0

過去 2 か月間、私は Symfony2 Web アプリケーションを開発してきました。少し制御不能になったので、メンテナンスを簡単にしたいので、戻っていくつかの問題を修正しようとしています。

私のアプリケーションは、次のような一連のバンドルに構造化されています。

src/AppName/HelpBundle
src/Appname/InterfaceBundle
src/AppName/ProductBundle
src/AppName/UserBundle

InterfaceBundle には、メイン レイアウト用のいくつかの twig テンプレートが含まれているだけで、他の各バンドルはそれを拡張するだけです。

{% extends 'AppNameInterfaceBundle::layout.html.twig' %}

コントローラーの場合、各コントローラー ディレクトリには、User と Admin の 2 つのサブディレクトリがあります。次に例を示します。

src/AppName/ProductBundle/Controller/Admin/ProductCategoryController.php
src/AppName/ProductBundle/Controller/User/ProductCategoryController.php

これは Symfony アプリケーションを構築する適切な方法ですか、それとも別の方法で行うべきですか?

4

1 に答える 1

1

問題はあまり詳細ではありませんが、私が見た限りでは、AdminBundle と UserBundle に、それらを再利用してコントローラーを構築できる汎用サービスのセットが含まれるように整理することができると思います。

次に、これらのサービスを再利用/操作する ProductBundle のような一連のバンドルを作成できます。Symfony の Controller クラスを拡張するのではなく、コントローラーで依存性注入を使用します。このようにして、サービスの継承を利用して、AdminBundle と UserBundle で抽象コントローラーを構築し、それらを使用して特定のコントローラーを派生させることができます。

より一般的には、アプリケーションのドメインを横断する各懸念 (検索エンジンでのエンティティのインデックス作成、ロギング、URL の生成など) について、Symfony アプリケーションを構築するのが好きです。それを処理するためのいくつかの抽象化を提供します。ドメインの各領域 (製品管理、ユーザー管理など) については、抽象化で提供されるインターフェイスを実装し、提供される抽象化で使用される特定のサービスを登録するバンドルを用意するのが好きです。この場合、コンテナーの構成とタグ付けシステムを介してインターフェースを行うことができます。

質問はかなり一般的だったので、私の答えもそうです。詳細が必要な場合は、質問に詳細を記入してください。

于 2012-11-02T14:25:15.427 に答える