Winforms Menustripの分離をコード保守性を向上させます
-
30-09-2019 - |
質問
Windowsフォームでは、c#、.net 3.5、vs2008 ...
私のフォームの残りの部分から、メノーストリップ(または複雑なコントロールグループ)のコードを隔離する良い方法は何ですか?
たとえば、多くのメニューを備えたメニュストリップがあり、各メニューには多くのメニュー項目があります。これらにはすべてクリックイベントがあり、form.desinger.csファイルとform.csの両方に大量のコードが噴出されます。ファイル。これは技術的に問題を引き起こすわけではありませんが、すべてが1つの場所に捨てられるのは間違っていると感じています(形の他のすべてとともに)。
プロジェクト全体でコードメトリックを実行すると、フォームには、プロジェクトファイルの最悪の保守性インデックスがあるとフラグが付けられています。通常、私はコードメトリックツールの方向に留意することについて非常に独断的ではありませんが、この場合、私は完全に同意します。
コードメトリックによると、フォームはこれらのベストプラクティスに違反しています。
- クラスの結合が多すぎます
- コードの行が多すぎます
- 全体的に低い保守性
メノーストリップをフォームの残りの部分から隔離する可能性のある解決策:
- usercontrolに詰めます
- 他のアイデア?
解決
たとえば、プレゼンテーションロジックからビジネスロジックを分離することに注意する必要があると思います。たとえば、クリックハンドラーにあまりコードを配置したり、メニュー項目のコマンドを実装したりしないでください。
コードメトリックが生成されたコードに触れないか、自動生成コードの不良メトリックに注意を払わないことを確認してください。
他のヒント
たとえば、Grabbing *.designer.csからCodeMetricsを無効にしたりフィルタリングしたりできますか?
そうでない場合は、これらの構造を1行で作成できるように、工場クラスを使用します。これの欠点は、デザイナーの機能を低下させることです。工場では、たとえば、テンプレートの文字列 +「_filemenu」に基づいて各コンポーネントに名前を付けることができます。たとえば、工場のコンストラクターにベース「名前」を設定できます。
form.csファイルでコードを削減するには、MVCアプローチをより多く検討してください。これにより、デザイナーが生成したときに、 private void button1_Click
方法では、他のクラスの他の方法にいくつかのビジネスロジックを抽象化します。したがって、すべてのファイルを移動する代わりに、 button1_Click
電話します InitiateMoveFileMethod( string source, string destination )
, 、 例えば。