はい、Web アプリケーションの MVC アーキテクチャにおける責任の分離に関する別の質問ですが、これには微妙な違いがあると思います...
私の既存の実装は次のようになります。
- コントローラー: 非常に「薄い」; モデルとビュー、ルーティングとプレゼンテーション ロジックのみの呼び出しを除く
- モデル: 非常に「厚い」。すべてのビジネス ロジック
- ビュー: 非常に「薄い」。コンテンツとマークアップは別として、コードはループとデータのフォーマットに限定されます
さらに、このプロジェクトでは、ORM をデータベースの上の抽象化レイヤーとして利用し、「コネクタ」を外部サービスへのラッパー クラスとして利用しています。
私の質問は、モデル間の責任の分離に関するものです。ほとんどの場合、モデルはシステム内の「もの」 (「ユーザー」、「製品」、「注文」など) を模倣しています。
これは、単純なデータ取得要求を処理するのに非常にうまく機能することがわかりました-コントローラーは適切なモデルをインスタンス化し、関連する「ゲッター」を呼び出します。
この問題は、「PlaceOrder」や「RegisterUser」などのより複雑なプロセスが開始されたときに発生します。これらのプロセスは、単一のモデル内で実装できる場合もあれば、実装するためにモデル間の通信または調整が必要な場合もあります。
現状では、これらのケースでは、プロセスがコントローラーによって管理されるのではなく、モデル同士が直接通信します。プロセスをモデル内に保持することは適切なようです (たとえば、「RegisterUser」のビジネス ルールでは確認メールの送信が必要であることをコントローラが認識する必要はありません)。
この実装で私が見つけたのは、私がやや懸念する2つの問題です。
- モデルは他のモデルについてあまりにも多くのことを知っているように見えることがよくあります - この実装では、モデルが密結合しすぎているように見えます。
- モデル内のメソッドには 2 つの一般的なタイプがあります。「ゲッター/セッター」と、プロセスを管理するメソッドである「プロセス メソッド」の呼び出しに使用したもので、必要に応じてモデルまたは他のモデル内の他のメソッドを呼び出します。これらのメソッドは「より良い説明がないため、モデルのようではありません。
2 種類のモデルを実装するのが適切でしょうか?「データ/オブジェクト モデル」(主に「ゲッター/セッター」とおそらく単純な「プロセス メソッド」で構成され、内部のみで構成され、「プロセス モデル」(「プロセス メソッド」で構成され、複数の(「データ/オブジェクト」)モデルのコラボレーションが必要ですか?
この実装では、「ユーザー」、「製品」、「注文」、および「登録」、「注文」などを表すモデルがあります。
考え?