ビューとコントローラー(Web)を分離する理由


8

それぞれのアクションとそのビューが対になっているように、それらを同じページに配置できないのはなぜですか?コードアイランドを使用していませんが、上部にコントローラーコードを表示し、下部にコードを表示していますか?このアプローチの問題は何ですか?

MVCとは、ASP.NET MVCやRuby on Railsなどのフレームワークを指し、VとCは実際にはUIレイヤーであるという印象を受けています。

回答:


5

それらが一般に分離されている理由は、モデルに到達するためにビューでコントローラーを使用する必要があるためです。ただし、このアーキテクチャでは、ビジネスロジック(オブジェクトモデルやオブジェクトの取得方法)を変更することなく、ビューを別のビューに置き換えることができます。

コントローラーをビューに直接関連付けないことで、後で、UIに依存せずにコントローラー/モデルを直接使用できるインポート/エクスポートなどの他の機能を追加する方がはるかに簡単になります。

UIからできるだけ多くのコードをプッシュするもう1つの利点は、UIの背後にあるビジネスレイヤーよりもUIの単体テストがはるかに難しいためです。ビュー自体からできる限り分離することで、より多くの単体テストを記述して、コントローラー/モデルとアプリケーションロジックが正しいことを確認できます。


インポート/エクスポートの場合、ビューはまったく必要ないため、切り離す必要はありません。テストの場合でも、アクション/ビューで論理テストを実行できます。私が目にする唯一の問題は、テストする必要のないビューコードのロードですが、簡単に回避できます。
アンディ

インポート/エクスポートの場合、ビューはまったく必要ないため、コントローラーがビューから切り離されていない場合、インポート/エクスポートがWebベースでなくてもビューコードを実行する必要があるのはなぜですか。また、Webページを使用する場合でも、同じモデル(つまり、異なるASPページ、異なるクラス)に複数のビューを含めることができます。コントローラーを分離しないと、異なるコードでそのコードを複製することになります。
DXM

ビューがない場合、分離されているかどうかに関係なく、ビューはありません。
アンディ

「なぜコントローラーをビューから切り離すのか」という質問だと思いました。インポート/エクスポートがオブジェクトモデルに到達するためにコントローラーにアクセスする必要がある場合、ビューをインスタンス化せずにそれをどのように実行できますか?デカップリングなしでは、誰かがHTMLをレンダリングしているかどうかに関係なく、ビューコードをインスタンス化しています。または、インポート/エクスポート機能内でコントローラーコードを複製することをお勧めしますか?
DXM

1
元の投稿:「同じページに配置できないのはなぜですか」-HTMLをレンダリングしてモデルデータを表示するasp.netページがあります。このページでは、VCを1つのクラスに結合しました。これで、アプリケーションがインポート/エクスポートをサポートする必要があるという要件が得られました(このページからではなく、一般に)。完全に別個のインポート/エクスポートロジックがコントローラーにアクセスする必要がある場合、どこから取得するのですか?または、アプリケーション全体を同じPageクラスに入れることを計画していますか?エクスポートをオフラインで実行する場合(Webサーバーの外部のサーバーボックスでローカルに実行する場合)はどうなりますか?
DXM

4
  • コントローラーは、時々変更されるビジネスロジックを処理し、要件に応じてビューは変更されないままになる場合があります。

  • 上記の逆も当てはまります。

  • デザイナーと開発者は、同じプロジェクトで独立して作業できる必要があります。

いい投稿:http : //mashable.com/2011/11/12/designer-collaboration-strategies/

  • システム全体がより保守しやすくなります。分離されたアプローチにより、バグの解決が容易になります。

  • フロントエンド技術を備えたウェブ標準は急速に変化しています。すべてのフロントエンド技術をHTML5やDartなどに移行することを決定している企業を想像してみてください。ビューとコントローラーを組み合わせると、悪夢になります。


まず、ほとんどの場合、ビジネスロジックをモデルに含める必要があります。第2に、ビューにはforeachやヘルパーなどのコードがたくさんあります。グラフィックデザイナーはそれを扱いたくありません。彼がそれに対処したいのであれば、彼は実際にはUIプログラマーであり、コントローラーは彼の懸念の一部です。HTML5については、ほとんどのHTMLはレイアウトメカニズム、HTMLヘルパー、およびパーシャルビュー(ヘルパーのようなもの)から構成されているため、ビューが結合されているかどうかは問題ではなく、HTML5のビュー自体を変更することはありません。 。
アンディ

@Andy YouyはCとVの区別を求めました...その観点から、Cはモデルを処理するので、ビジネスロジックを処理します。
yannis

3

もちろん、2つを分離する必要はありません。ただし、ビューとコントローラーが独立している場合は、任意のユーザーインターフェイスを使用できます。たとえば、コンソール、ソケット、Web、またはデスクトップインターフェイスを介してコントローラを使用できます。つまり、コードの再利用を増やすことができます。


私はWeb開発について言及していましたが、UIは実際にはビューとコントローラーを組み合わせたものなので、ビューだけを新しいUIと交換することはできません。
アンディ

3
@Andy-可能であれば、開発中のWebサイトにネイティブiOSアプリとAndroidアプリを用意することを決定できます。やり直す必要はなく、コントローラーを呼び出して、iOS / Androidデバイスで別のビューを表示し、コントローラーを再利用できます。
ジェティ

@Jettiそれは良い点です。
アンディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.