4

私はMVCと多層Webアーキテクチャの概念に不慣れです。PHPアプリケーションを開発していて、利用可能なMVCフレームワークの1つを使用しています。私の質問は次のとおりです。

私が理解していることから、MVC自体は多層アーキテクチャとは見なされません。MVCを単独で使用することは、構造化されていないアプローチを採用することからのステップアップであることが理解できますが、単純な3層アーキテクチャがどのように適合するかを考えていました。MVCはプレゼンテーション層に存在しますか?階層型アプローチを追加するメリットは何ですか?私が収集したものから、MVCだけでは、データベースからデータを取得する責任のある明示的なデータオブジェクトはなく、これは通常、モデルに詰め込まれています。同様に、3層アーキテクチャでは「ビジネスレイヤー」(またはそれを呼び出したいもの)に存在するビジネスロジックをコントローラーに詰め込むことができます。

私の理解はやや正しいですか?多くの質問をしたことは知っていますが、2つは相互に排他的ではないと想定しているため、MVCフレームワーク(PHPまたはその他)にn層アーキテクチャをどのように組み込んだかについて話し合いたいと思います。ありがとう!

4

2 に答える 2

3

M)Mはあなたのモデルです。これは通常、ビジネスレイヤーまたはプレゼンテーションレイヤーのすぐ後ろのレイヤーに存在します。しかし、多くの人はプレゼンテーション層がビジネス層の知識を持っていることを好まないので、ViewModelと呼ばれるものを持つことによってそれをさらに抽象化します。これらは多くの場合、ドメインモデルに大まかにマッピングされるDTO(データ転送オブジェクト)です。私(.netの人)には、ドメインモデルからビューモデルに変換するためのAutoMapperなどのツールがあります。

V)Vはあなたの見解です。ビューはプレゼンテーション層です。これは、ユーザーが直接触れて操作する実際のHTMLまたはPHPコードです。ビューは可能な限り明るくする必要があります(可能な場合はロジックがないことを意味します)。あらゆる種類のif/thenタイプのシナリオを表示しないようにし、データの表示と収集だけに固執するようにしてください。ドメインモデルを汚染しないように、WebデザイナーにViewModelを提示します。

C)Cはコントローラーです。これはコーディネーターによく似ています。ビューからデータを取得し、そのデータを処理するための適切なバックエンド関数/メソッドに確実に到達するようにします。また、フロントエンドに向かう途中でバックエンドからのデータを調整します。

多層設計の概念が登場するのは、プレゼンテーション層の背後にあります(MVCが主に存在する場所です)。コントローラがビューからデータを取得してバックエンドに戻す場合(DDDまたはドメイン駆動設計に従っている場合)、データはアプリケーションサービス(バックエンドの問題を調整するクラス)に渡されます。このサービスは、データをリポジトリレイヤー(データベース、ファイルシステム、Webサービスなど-インフラストラクチャーのものと通信するクラス)にさらにプッシュする場合があります。DDDは大きなトピックですが、n層アプローチとそれがMVCでどのように機能するかについて頭を悩ませます。

このトピックを研究している間、IoC(制御の反転)、DI(依存性注入)、TDD(テスト駆動開発)、および可能な限り多くのパターン(ファサード、ファクトリーなど)を調べてください。

于 2009-07-16T02:09:27.490 に答える
-1

一般に、ビジネスロジックはコントローラーに含めるべきではありません。このパターンに従うと、大規模なコントローラーになってしまいます。モデルは基本的に、すべての非プレゼンテーション層(データアクセス、ビジネスロジック、およびビジネスエンティティオブジェクト)を格納します。コントローラは、ビューのビジネスデータを準備します。

于 2009-07-16T02:02:53.083 に答える