2016-06-13 5 views
1

これは私が何回も実行したコード管理の問題です。私はwinformsアプリケーションを持っていると言って、多くのコンテンツがあります。何百ものコントロールのコンテンツがあります。そのほとんどには、イベントハンドラとメソッドが付属しています。そのような大きなファイルをどのように分離するかについての推奨事項を探す際には、部分的なクラスである&という部分があります。しかし、これらはどちらも、ほぼすべてのトップアンサーに嫌われています。何百ものイベントハンドラを分離する

私はこのようなものを分離するためのベストプラクティスは何ですか?単にイベントハンドラを制御しているので、それらを新しいクラスに分けるのは意味がありません。リージョンは素晴らしかったですが、非常に多くのコードでは非常に乱雑です。 SRPをここに適用する方法を理解することができず、私が見ている勧告は悪い習慣とみなされています。

+3

部分クラスで何が問題になっていますか?私はコードを別々に保つためにこれまでに使ってきましたが、私の場合はうまく動作します。 "ClassName_EventHandlers.cs"ファイルのように見えるのは、コードを分けて1つの場所ですべてを簡単に見つけることができる素晴らしい方法です。 – Quantic

+0

イベントハンドラを別の部分クラスに移動する[プロジェクトの手術が必要](http://stackoverflow.com/q/37762519/17034) –

+0

@HansPassant:ビジュアルスタジオ2015では、Designerの「Go To Definition」右クリックオプションは、2012年以前の「Navigate To Handler」とは異なり、プロジェクトファイルを更新せずに部分クラスのイベントハンドラを見つけることがほとんどです。 – PaulF

答えて

3

「適切な」方法は、フォームをユーザーコントロールに分割することです。

部分クラスは、ユーザーコードと地域から生成されたコードを分離するために意図されている(私の意見ではと役に立たないが、それはただの意見です)だけでレイアウトされているユーザーコントロール内のウィンドウは、適切なカプセル化と再を促進

分割つかいます。

プロジェクトによっては、それをクリーンアップするには高価すぎるかもしれませんが、簡単なものをいくつか分けて読みやすくすると、デバッグに時間がかかることがあります。また、新しいコントロールとロジックを追加するときは、ユーザーコントロールを追加して、そのように分割するプロセスを開始することを検討してください。費用は、その後、長期間にわたり、あなたが実際に使用し、読めるようにする必要がある部分に対してのみ支払われます。

+0

これは行く方法です。フォームが自然にコントロールに分割されないという応答がある場合は、同じハンドラを再利用できる必要があるため、デザインについて間違った方向があります。 –

+0

これは実際のコスト/利益の考慮事項を無視したグリブの答えです。どんなコントロールも本当に再利用可能であるとは考えにくいので、「適切なカプセル化」という唯一のメリットだけで大手術を提唱しています。フォームは、個々のコントロールが前から新しい方法で相互にやり取りすることを要求するため、余分な複雑さも無視します。 – stuartd

+0

私はユーザーコントロールを見てきましたが、いくつかの質問が続きました。ユーザーコントロールを別のユーザーコントロールとやりとりさせる最も良い方法は何ですか?例えばusercontrol2がusercontrol1の値を更新する必要がある場合、usercontrol1の参照をusercontrol2に取得する最良の方法は何ですか? usercontrol2を作成し、usercontrol1を含むpublic変数にアクセスするときに、メインフォームへの参照を渡すだけですか? – Branden

関連する問題