かなり大きくなった MainForm を使用してデスクトップ アプリケーションを開発しています。さまざまなレベル (SplitContainers、TabPages、Panels) の複数のコンテナーに多数のコントロールがあります。
ここで、データバインディングとコントロールのクリア、またはユーザー操作の実行を担当するすべてのコントローラーコードを個別のコントローラークラスに分離することにより、このクラスをリファクタリングしたいと考えています。
[編集]
目的
このアプリケーションの目的は、注文 (ジョブと呼ばれる) とその位置 (ジョブアイテムと呼ばれる) を追跡することです。各ジョブは顧客に関連し、各ジョブアイテムは記事に関連しています (ジョブアイテムには、その記事の製造プロセスに固有の情報が含まれているため、記事をラッピングしています)。Job、Joitem、Customer、および Article には、PropertyManager クラスによって管理される動的プロパティ (基本的なキーと値のペア) があります。
建築
私のアプリケーションは 2 つのメイン プロジェクトに分割されています。コアには、3 つの LinqToSQL DataContext クラスのデータ モデルが含まれています。
ArticleManagement
JobManagement
PropertyManagement
すべての DataContext クラスにはXyzManager
、コレクション内の LinqToSQL オブジェクトを GUI に提供し、LinqToSQL データ ソースをカプセル化するクラスがあります。また、対応する DataContext タイプの作成、削除、および変更も処理します。
次に、GUI プロジェクトを作成しました。当然、メイン フォームと、オプションなどの追加フォームがいくつか含まれています。現在、私の GUI プロジェクトは、各 XyzManager クラスへの参照を保持し、Manager クラスを介してデータを取得および設定します。すべての制御ロジックを含む、ユーザー インタラクションによって指示されます。
このための独立したロジックのほとんどを、メイン フォーム クラスの外にある静的なユーティリティ クラスに入れましたが、それは理想的とは言えない方法だと思います。
[/編集]
これは私の最初の大きなデスクトップ アプリケーションであり、GUI をカプセル化するのに苦労しています。現時点では、ユーザー インタラクションの処理を担当するすべてのコントローラー コードは MainForm クラス内にあります。
MVC パターンについては知っていますが、現在のデザインで C# WinForm に適用する方法がわかりません。
私のカスタム コードだけでも 2,400 行を超える長さのコードがあり、フォームの自動生成されたコードにはカウントされず、増加傾向にあります。これをリファクタリングしたいのですが、よりエレガントな方法でこれを解決する方法がわかりません。