1

Windowsフォームでは、C#、. NET 3.5、VS2008 .. ..

MenuStrip(または任意の複雑なコントロールグループ)のコードとその子メニュー項目をフォームの他の部分から分離するための良い方法は何ですか?

たとえば、多数のメニューを含むMenuStripがあり、各メニューに多数のメニュー項目があり、すべてにクリックイベントがある場合、Form.Desinger.csファイルとForm.csの両方に大量のコードが吐き出されます。ファイル。これは技術的には問題を引き起こしませんが、(フォーム内の他のすべてのものと一緒に)すべてを1つの場所にダンプするのは間違っていると感じます。

プロジェクト全体でコードメトリクスを実行すると、フォームには、プロジェクトファイルの中で最悪の保守性インデックスがあるというフラグが立てられます。通常、私はコードメトリクスツールの方向性に注意を払うことについてあまり独断的ではありませんが、この場合、私は完全に同意します。

コードメトリクスによると、フォームは次のベストプラクティスに違反しています。

  1. クラス結合が多すぎます
  2. コードの行が多すぎます
  3. 全体的に保守性が低い

MenuStripをフォームの残りの部分から分離するための可能な解決策:

  1. UserControlに詰め込みます
  2. 他のアイデア?
4

2 に答える 2

0

ビジネスロジックをプレゼンテーションロジックから分離するように注意する必要があると思います。たとえば、クリックハンドラーに多くのコードを配置したり、メニュー項目のコマンドを実装したりしないでください。

コードメトリクスが生成されたコードに影響を与えないこと、または自動生成されたコードの不正なメトリクスに注意を払わないことを確認してください。

于 2010-06-25T19:59:50.533 に答える
0

たとえば、CodeMetricsが* .Designer.csを取得しないように無効化またはフィルタリングできますか?

そうでない場合は、Factoryクラスを使用して、これらの構造を1行で作成できるようにします。これの欠点は、Designerの機能が低下することです。ファクトリでは、たとえば、テンプレート文字列+ "_FileMenu"に基づいて各コンポーネントに名前を付けることができるため、ファクトリコンストラクタでベースの"name"を設定できます。

Form.csファイルでのコードの吐き出しを減らすには、MVCアプローチを検討してください。これにより、デザイナーがメソッドなどを生成するときに、private void button1_Clickビジネスロジックを他のクラスの他のメソッドに抽象化できます。したがって、すべてのファイルを移動する代わりに、たとえばbutton1_Clickを呼び出します。InitiateMoveFileMethod( string source, string destination )

于 2010-06-25T20:03:59.753 に答える