単体テストはMVCパターンの主な目的ですか?


14

最近のインタビューで、質問の1つは「なぜMVCを使用するのですか?」実世界のシステムの多くは、どれほど近いかと答えただけです!保守性、スケーラビリティなどに関しては利点があることを説明しました。しかし、彼らは納得できず、MVCは主に「簡単な単体テストを可能にする」ために使用されると言いました。

私は彼らのものが有効なポイントであることを知っていますが、(i)ユニットテストケースを書かないと決めたとしても、MVCはおそらく選択肢であるため、それが主な理由であるかどうか疑問ですMVCに従ってください。

質問は「ユニットテストはMVCパターンの主な目的ですか?」です。

編集:私は彼らがテスト駆動開発/ NUnitテストケースを書くことの容易さについて言及しているかもしれないと思います。これは、モデルのテストケースを作成できるためです(ビューがモデルの状態の変化を正確に反映している場合)。間違っている場合は修正してください。


11
面接に合格しなかったのですか?いいえ、幸運です。最初から非常に間違った考え方を持つ会社には参加しません。:)ユニットテストは間違いなく主要な目的ではありません。懸念がすべて分離されたため、単体テストに役立つ場合がありますが、主な目的ではありません。
ルディ

4
インタビューは両方の方法で機能することを忘れないでください。彼らはあなたをテストしているのと同じくらいそれらを調査しています。あなたは赤い旗を手に入れただけです。この会社に行かないでください。彼らには手がかりはありませんが、さらに悪いことに、彼らはそれを認識しないと思うので、改善の希望はありません。会社に行くことを選択した場合、多くのカフカエスクのような状況に直面するでしょう。
deadalnix

@Rudyいいえ、合格しませんでした。P、それは大手投資銀行の開発センターでした。また、他の質問については、男たちは見栄えが良く、非常に本物でした。だから、私はこれと混同されました。
WinW

@deadalnix、そうだね。ここで答えを見てから同じように感じる。しかし、ここに投稿する前は確信が持てませんでした。
WinW

deadalnixに完全に同意します。この会社に行かないでください。
ルディ

回答:


33

モデル、ビュー、およびコントローラーはすべて別個の責任を負うため、主な目的は「懸念の分離」です。

元のゼロックスPARC論文著者は次のように述べています。

MVCの本質的な目的は、人間のユーザーのメンタルモデルとコンピューターに存在するデジタルモデルとの間のギャップを埋めることです。

単体テストが主要な目的である場合、ビューを簡単に単体テストすることができます。ユニットテストプロジェクト/フレームワークの風景を見ると、それが主張に反していることが明らかになります。通常、統合テストと機能テストを使用してビューをテストします。


2
主な目的は、ダイレクトマニピュレーションメタファー(それは基本的に引用文が言うことです)とユーザーエンパワーメント(当初はモデルのみがプログラマーによって作成され、ビューとコントローラーはエンドユーザーによって作成されると想定されていました)を有効にすることです。
ヨルグWミットタグ

14

私の意見では、答えはしっかりした「いいえ」です。おそらく、これがこの特定の組織で観察された主な利点でしたが、私はそれを「主要な目的」とは呼びません。

MVCをある意味で実装するのはそれほど難しいことではなく、ユニットテストが非常に難しい(おそらく、私が初めてやった方法はほとんどテストできませんでした)。

一方、ほとんどのパターン(シングルトンのようなものを除く)は、ほとんどの場合デカップリングを促進するため、ユニットテストを促進すると言うことができますが、それは「主な目的」ですか?ほとんどない。


12

MVC(ほとんどの既知の設計パターンと同様)は、単体テストが知られるようになる前の段階でした。GoFの本は1994年に出版されました-そして、彼らは何十年も前(数十年ではないにしても)使用されてきたパターンのみを文書化していました。(そして、ユニットテストについては言及されていません。)ユニットテストについては、「パブリック」になった正確な時間を見つけることができません。 1999年に登場しました。

したがって、明らかに、ユニットテストはパターンの作成/文書化の主な目的ではありませんでしたが、パターンを適切に適用するとユニットテストが大幅に容易になると言っても過言ではありません。


タイムラインリファレンスは、論理的に引数をサポートする素晴らしい言及です。
WinW

日付に問題があるようです。heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.htmlは、「MVCは1978年に特定の問題の設計ソリューションとして考案された」と述べています。心配いりません...それでもあなたの主張は正しいです。MVCはユニットテストが始まるずっと前からありました。
WinW

ユニットテストは、少なくとも1980年代から行われています。私はその時からキャリアを始めていましたが、私が取り組んだプロジェクトのいくつかでユニットテストを行いました(そして、それは新しいアイデアのようには見えませんでした)。私たちには、現在のビルド済みフレームワークがありませんでした。
グリーンマット

2
@GreenMatt、ユニットテストはKent Beckによって発明されたのではなく、再利用されただけだと思います:-)しかし、XPとAgileが広く普及する前は、それは比較的不明でした。
ペテルテローク

@PéterTörök:私は1)大学に戻って個々の機能をテストするための独自の簡単なコードを書いた(私にとっては1980年代前半)ことを覚えています。2)80年代または90年代のウォーターフォールモデルの描写を読んで、「コーディングとユニットテスト」と呼ばれるフェーズ(「コーディング」だけ)で読む。(申し訳ありませんが、どこにあるか覚えていないので、引用を提供することはできません。)したがって、単体テストはかなり前から存在し、進化しています。
グリーンマット

2

ユニットテストの容易さは利点の1つですが、MVCを使用する際の利点のコレクションの一部であり、その理由を挙げてください。MVCを使用する主な理由は1つしかないと言うのは間違いです。問題の会社は、単体テストを容易にするためにMVCを選択しているように思われるため、それが主な理由であると考えています。個人的にMVCを使用する理由は、Webフォームと比較してシンプルであるため、設計および保守が容易になりますが、すべての個人/企業には、テクノロジーを使用する独自の理由があります。


0

ASP.NET MVCの世界では、ASP.NETの多くの改善がフレームワーク自体に含まれています。この設計パターンの主な目的は、ビジネスロジックをユーザーインターフェイスから分離して、メンテナンス性の向上、テスト容易性の向上、およびアプリケーションの構造のクリーン化に重点を置くことです。

ASP.NET MVCには、次の1つ以上が必要な場合に選択する最適なオプションとなる特定の機能があります。

生成されたHTMLに対する高度な制御:Webフォームとは異なり、ASP.NET MVCのビューは、ユーザーが指示したとおりにHTMLをレンダリングします。最近、この領域でWebフォームが改善されましたが、MVCの制御レベルはまだありません。

簡単なユニットテスト:ASP.NET MVCを使用すると、テスト駆動開発(TDD)などのテストパターンを簡単に追跡できます。Webフォームのイベントライフサイクルは複雑であるため、コントロールベースのフレームワークに加えて、MVDではTDDがはるかに簡単になります。

懸念の分離:これは、システムのすべての側面を互いに明確に分離することを指します。実装するパターンにより、MVCアプリケーションは個別の部分と緩やかにバインドされた部分(モデル、ビュー、コントローラー)に分割され、保守が容易になります。

その他の利点のいくつかは次のとおりです。

MVCパターン自体は、アプリケーションの機能をモデル、ビュー、コントローラーの3つのコア部分に明確に分離することにより、複雑さを管理しやすくします。

•ASP.NET MVC Webアプリケーションは、ビューステートまたはサーバーベースのフォームを使用しません。これにより、MVCフレームワークは、アプリケーションの動作を完全に制御したい開発者にとって理想的です。ビューステートは非常に大きくなる可能性があります。これは、低速ネットワークで実行されるスマートフォンなどのデバイスの問題です(すべての情報の送信は非常に遅くなる可能性があります)。Webフォームページでは、ページごとに1つしか持てません。これは非常に大きな制限です。MVCには、このような制限はありません。つまり、好きなだけ要素を持つことができます。

•ASP.NET MVCは、テスト駆動開発(TDD)のサポートを改善します。

•ASP.NET MVCは、大規模な開発者チームがサポートするWebアプリケーションや、HTMLを高度に制御する必要があるWebデザイナーに適しています。ASP.NET MVCリクエスト処理

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