Martin Fowler-GUIアーキテクチャ。 パート5

前の部分はこちらです。 元の記事はこちらです。



これが最後の部分です。



ハンブルビュー(シンプルビュー)



数年前、プログラミングの分野で、新しいファッショントレンドが登場しました-セルフテストコードを書くため。 私はファッションの問題について最後に連絡を受けたという事実にもかかわらず、私はこの考えに完全に没頭しています。 さらに、私の同僚の中には、xUnitフレームワーク、自動回帰テスト、テスト駆動開発、継続的インテグレーションテクニック、その他の同様のあいまいな用語のファンがたくさんいます。



セルフテストコードの記述に関する問題の1つは、ユーザーインターフェイスのテストの記述であると考えられています。 多くの人々は、難易度に関してGUIをテストすることは「非常に難しい」と「不可能」の間のどこかにあると考えています。 この評価は、ユーザーインターフェイスが一般的なUI環境に密接に関連しているため、それらを分離して個別にテストすることは困難であるという事実から生じています。



ただし、この推定値が高すぎる場合があります。 ペンを使用してカスタム要素の作成を開始し、テストコードでそれらを操作すると、すばらしい結果を得ることができます。 ただし、これだけでは十分ではなく、テストできない場合もあります。 たとえば、要素の複雑な相互作用、マルチスレッド環境、またはテスト自体の実行が遅い場合。



説明されている問題の解決策は、テストが困難なオブジェクトの機能の量を最小限に抑えるようなユーザーインターフェイスの設計です。 このアプローチは、マイケルフェザーズの「謙虚なダイアログボックス」で明確に説明されています。 Gerard Meszarosは、この理解を単純なオブジェクトHumble Object )のアイデアに一般化しています。テストが困難なオブジェクトには、最小限の機能が必要です。 したがって、そのようなオブジェクトのテストを作成できなかった場合、その動作にエラーが発生する可能性も最小限に抑えられます。



Humble Dialog Boxは、MVPモデルのプレゼンターを使用します。 ただし、基本MVPで説明されている機能よりもはるかに優れた機能を備えています。 Presenterは、イベントへの応答方法を定義するだけでなく、ユーザー要素へのデータ入力も処理します。 その結果、ユーザー要素はモデルにアクセスして表示する必要がなくなりました。 これらはパッシブビューを形成します 。これはプレゼンターによって完全に制御されます。



説明したアプローチは、プレゼンテーションを単純化できる唯一のアプローチではありません。 別のアプローチは、 プレゼンテーションモデルテンプレートを使用することです。 その小さな欠点は、コントロールにビューモデルにアタッチ(マップ)できるようにするためのより多くの機能をコントロールに与える必要があることです。



両方のアプローチの鍵は、プレゼンターまたはプレゼンテーションモデルのテストを記述するだけでよいことです。 彼らは主要な「危険な」機能をテストしますが、「テストするのが難しい」コントロールは傍観者のままです。



プレゼンテーションモデルの詳細をご覧ください。 プレゼンテーションモデルは、関連するすべてのロジックを実装する必要があります。 すべてのユーザーイベントをビューモデルにリダイレクトする必要があります。 コントロールが行う必要があるのは、対応するプロパティにバインドすることだけです。 テストは、コントロールを必要とせずに、ビューモデルのすべての機能をテストします。 唯一のリスクは、モデルへの要素のバインドにのみ残ります。 バインディング機能の実装は非常に簡単であるため、視力検査を終了できます。 確かに、この場合、プレゼンテーションはパッシブビューアプローチのように「単純」ではありません。 ただし、違いは非常に小さいです。



Passive Viewの場合、私が言ったように、バインディング機能の欠如は、プレゼンテーションモデルの場合に存在するリスクを取り除きます。 このリスクがないことの代償は、テスト実行中の画面の動作をエミュレートするために必要なTest Doubleの必要性です。 つまり、追加のソフトウェアメカニズムを作成して構成する必要があります。



同様のソリューションが、 Supervising Controllerテンプレートに存在します 。 ( プレゼンテーションモデルの場合のように)ビューがバインドを強制されると、エラーのリスクが発生します。このようなバインドの利点は、すべて宣言的であるということです。 監視コントローラーとのそのようなバインドの数は、ビューモデルにおけるコントローラを統括表現のモデルは、それらの複雑なベースのシナリオを解決することを余儀なくさせながら、明示的にそのコードに定義されたコントロールに(最も複雑な場合やシナリオで)データの転送に従事しています 結合機構によるアリア。



次へ



これらのアイデアを発展させる記事を読みたいなら、私のブリキをチェックしてください



謝辞



Vasily Bykovは、ホッブズのコピー-VisualWorksの最新バージョンで実行できるSmalltalk 80プラットフォームバージョン2(1980!)の実装をimplementationしみなく共有しました。 このコピーでは、ライブのオリジナルMVCでサンプルを作成することができました。これは、当時の動作と使用方法を理解するのに大いに役立ちました。 ちなみに、多くの人は仮想マシンの使用を否定的に感じています。 興味深いことに、Ubuntuで動作するVMwareで動作するWindows XPで動作するVisualWorks仮想マシンで動作するVisualWorksで記述された仮想マシンでSmalltalk 80で作業しているのを見たら、彼らは言うでしょうか?



重要な改訂



2006年7月18日:サイトでの最初の公開



すべての権利はマーティン・ファウラーに帰属します。 無断複写・転載を禁じます。



All Articles