まともなデカップルアーキテクチャを維持しながら、WinFormsでクリーンUI機能を実装する最善の方法は何ですか?


4

私はかなり自己文書化するvoid doSomething()メソッドを使用してUI機能を実装する傾向があります。つまり、ユーザーがこのボタンを押してからこのアクションを実行し、このリストボックスを有効にし、そのボタンを無効にします。一般的なUI管理のためのより良いパターンがありますか?つまり、コントロールが有効/無効/などのときの制御方法です。ユーザーの入力に応じて

多くの場合、「主な」フォームクラスと相互作用するようなので、私は「すべてのことを行う大きなクラス」に向かっているように感じています。しばしば、比較的モジュール式のデザインを使用して実装されたクラス内のプライベート状態変数を含む場合でも、私はまだそれがとても素早く成長することを見いだしています。

人々は、これらのトラップに陥ることなく、品質、テスト可能、デカップリングされたWinFormsデザインを作成するための良いアドバイスをいただけますか?

0

私はFormクラスにUIロジックを入れて、独自のクラス内の任意のアプリケーションロジックを置く:あなたは別のクラスでUIのロジックを入れたい場合は

class Form1 : Form 
{ 
    void Button1_Click 
    { 
     Program.DoCommand1(); 
    } 
} 


static class Program 
{ 
    internal static void DoCommand1() {/* ... */} 
} 

12

あなたがMVPを試すことができます。

Martin FowlerやMichael Feathersのように、モデルビューのプレゼンターでは、UIのロジックは、プレゼンターと呼ばれるクラスに分かれていて、ユーザーからのすべての入力を処理し、「ダム」ビューに何時表示する。パターンの特殊なテスト容易性は、ビュー全体をモックオブジェクトで置き換えることができ、このようにして、最も重要な部分であるプレゼンターを簡単に単体テストでテストすることができます。


3

MVPパターンを使用するとwinformsでかなり良いです。

は、私はドンされているhttp://www.objectmentor.com/resources/articles/TheHumbleDialogBox.pdf


0

を見て一つのことは、最近、これらの大規模型形態のいくつかの.NETの部分クラスの機能を活用しています。私はそれに5つのタブを持つタブコントロールがある場合。部分クラスを作成し、CardImportMethods.cs、ManageLookupTables.csなどのファイルに名前を付けて、CentralizedFormクラスのすべての部分を残します。

UIロジックだけであっても、このような内訳を管理することは、それらの管理に役立ちます。