かなり大きくなったMainFormでデスクトップアプリケーションを開発しています。異なるレベルの複数のコンテナには多数のコントロールがあります(SplitContainers、TabPages、Panels)。C#:カプセル化を考慮したデスクトップアプリケーションのGUIを巧みにデザインする方法
データクラス&をクリアするか、別のコントローラクラスにユーザー操作を行うすべてのコントローラコードを分離して、このクラスをリファクタリングします。
[EDIT]
本出願の目的は、注文(仕事と呼ばれる)とそれらの位置を追跡することである
目的(Jobitemと呼ばれます)。各ジョブは顧客に関連し、各ジョブアイテムは商品に関連付けられます(ジョブアイテムには商品の製造プロセスに固有の情報が含まれているため、商品をラッピングしています)。 Job、Jobitem、Customer、およびArticleには、PropertyManagerクラスで管理される動的プロパティ(基本キー/値ペア)があります。コアは3つのLinqToSQLのDataContextクラスのデータモデルが含まれています:
ArticleManagement
JobManagement
PropertyManagement
アーキテクチャ
私のアプリケーションは、2つの主要なプロジェクトに分割され
すべてのDataContextクラスに、LinqToSQLデータソースをカプセル化して、コレクション内のLinqToSQLオブジェクトをGUIに提供するXyzManager
クラスがあります。また、対応するDataContext型の作成、削除、および変更も処理します。
は、その後、私は自然に今のように、メインフォームとなどのオプションのようなもののためにいくつかの追加のフォームを含む、GUIのプロジェクトを持って、私のGUIプロジェクトは、各XyzManagerクラスへの参照を保持して&セットのデータを取得しますすべての制御ロジックを含む、ユーザーの操作が指示するマネージャクラス。
私はこれのための独立したロジックのほとんどをメインフォームクラスの外部の静的ユーティリティクラスに入れましたが、それは私が推測する理想的ではないアプローチです。
[/ EDIT]
これが私の最初の大きなデスクトップアプリケーションであり、私はGUIをカプセル化に苦労しています。現時点では、ユーザインタラクションを処理するすべてのコントローラコードは、MainFormクラス内にあります。
私はMVCパターンについて知っていますが、現在のデザインでC#WinFormに適用する方法がわかりません。
カスタムコードだけでも、フォームの自動生成コードにカウントされず、2400行以上のコードが長くなり、上昇傾向にあります。私はこれをリファクタリングしたいと思いますが、これをよりエレガントな方法で解決する方法は失われています。
リンクをありがとう。 Martin Fowler氏は最後に、監督者があなたのGUIをテストしたいときには良いと思っていますが、コントローラをビューから分離するのは得意ではないので、分離が私の主な目的であるため、私が探しているものではありません。テスト容易性は問題ではない。プレゼンテーションモデルは、この目標に適しています。 –
リンクが私を正しい方向に向けるので、答えとして受け入れられました。私はパッシブビュー(http://martinfowler.com/eaaDev/PassiveScreen.html)を解決策として使用しています。 –