参考までに、私の第一言語はPHPなので、これをすべて一粒の塩で取ることができます。
MVCおよびMVCに触発されたパターンのビジネスビジネスロジックは、モデルレイヤーに含まれている必要があります。はい、モデルはクラスやオブジェクトではなく、レイヤーであると想定されています。
上記のロジックのほとんどはドメインオブジェクトに存在しますが、一部はサービスになります。サービスは、モデルレイヤーの「トップレベル」構造のようになり、プレゼンテーションレイヤー(ビューとコントローラー)がモデルレイヤーと対話します。
サービスは、ストレージの抽象化(データマッパー、データアクセスオブジェクト、作業単位および/またはリポジトリ)とドメインオブジェクト間の相互作用も促進する必要があります。これらの構造は、永続的および一時的なストレージを処理し、データの整合性を処理します。
この種の分離により、コードベースの保守とテストの両方が簡素化されます。データベース(または他の形式のストレージ)に触れることなく、ドメインロジックを簡単にテストできるようになります。
コントローラー(および他のMVVMおよびMVPパターンからの同等の構造)は、ユーザーの要求から情報を抽出し、モデルレイヤーの状態(サービスを操作することによって)とビューを変更する必要があります。
MVPまたはMVVMを実装する場合、コントローラーのようなコンポーネントには、モデルレイヤーからビューへのデータ転送などの追加の責任がありますが、従来のMVCパターンとModel2 MVCパターンでは、ビューはモデルからのデータを要求するアクティブな構造であると想定されます。層。
JSONの生成に関しては、実際にはビューで発生するはずです。ビューには、すべて(または、テンプレートの使用方法によってはほとんど)のプレゼンテーションロジックが含まれている必要があります。モデルレイヤーから(直接または仲介を通じて)情報を取得し、その情報に基づいて応答を生成する必要があります(複数のテンプレートから作成する場合もあります)。JSONは、応答の単なる異なる形式になります。
2005年にリリースされたRailsフレームワークには、大きな影響があります(そしてほとんどがマイナスです)。本来の目的は、プロトタイピングのフレームワークであり、使い捨てのコードをすばやく作成することでした。これを達成するために、彼らは関心の分離が破られるまでパターンを単純化しました。
彼らは、モデルレイヤーをアクティブなレコード構造のコレクションに置き換えました。これにより、コントローラーでビュー機能を簡単に生成およびマージし、本格的なビューの代わりとして機能するテンプレートを残しました。最初の目標には完璧なソリューションでしたが、他の領域に広がり始めたとき、 「ビューは単なるテンプレート」や「モデルはORM」など、MVCやMVCに触発されたデザインパターンについて多くの誤解が生じました。