PHP MVC フレームワーク (Yii、しかし私の質問はほとんどの MVC フレームワークに当てはまる可能性があります) を使用して、Web アプリケーション (Web サイト) と RESTful Web サービスを含むプロジェクトを作成しています。アプリケーションとサービス ロジックを論理的に分離する方法について、初期の設計上の決定に直面しています。ここにいくつかの真実があります:
- Web アプリと Web サービスは多くの機能を共有し、表示される形式 (
View
vs JSON) のみが異なります... - ...しかし、Web アプリと Web サービスには独自の機能がいくつかあります (つまり、Web アプリにはできてサービスにはできないことがあり、その逆もあります)。
ここに私の願いがあります:
- 共通機能の実装を可能な限り共有したいと思います
Controller
Web サービスと Web アプリケーションのロジックを組み合わせた結果、 が扱いにくくなりたくない- Webサービスと Web アプリのコントローラーを別々に作成することに少し嫌悪感を覚える
Action
- 本当に必要な設計上の決定でない限り、Web サイトで Web サービスを使用したくありません。データベース インターフェイスを使用する多くの組み込み機能を利用できなくなります
IDataSource
。また、Web サービスに接続して、利用可能なインターフェイスやその他のインターフェイスに準拠するクラスを作成する必要があります。また、パフォーマンスがわずかに低下する可能性があります。
私はそれについて少し考えて、以下のいくつかの解決策を考え出しました. これらのどれが私の欲求を満たすと思うか、または私の欲求が合理的でない/非生産的でないかどうか教えてください.
- との完全に別個のコントローラーを実装します
WebApp
(WebService
コードを共有しないように 2 つをモジュール化します)。 WebApp
とに別々のコントローラーを実装しますが、面倒なWebService
作業を行うメソッドを作成し、それらのメソッドを呼び出して実装を共有しitem/findBySomeCrazyCriteria
ます。FindItemsBySomeCrazyCriteriaFunction()
他の場所。- Web アプリで Web サービスを使用するようにします (サービスの計画された機能を拡張する必要があります)。
WebApp
との両方に 1 つのコントローラーを実装します。これは、 $this->getModel()` の観点からタイプのものの汎用フックを含むWebService
から拡張され、必要に応じてオーバーライドを使用しますBaseController
REST
- 他に何か
私の質問は Yii に関するものですが、これは多くの開発者にとって過去に発生したに違いないと思います。あなたが何をしたか、前進するために何を勧めるか知りたいです。間違ったアプローチを選択すると、「MVC が壊れる」か、後で後悔するのではないかと心配しています。