2016-04-04 5 views
6

C#/ WPF/MVVM開発者として過去2年間を費やした後、私は最近新しい会社でVB/Winformプロジェクトを引き継いだ。C#とWinformsでの適切なクラスのインスタンス化

プロジェクトをC#に変換しました。私はこのプロジェクトのための最良の方法を見つけようと、大量の研究を行ってきましたが、私はリファクタリングと再構成の正確な量を把握しようとしています。

私の問題はこれです:以前の開発者は2つの巨大な静的クラスを作成しました。さまざまなタスクに使用される30以上のフォームがあります。各フォームは、「メインメニュー」タイプの画面をクリックすることによって駆動されるイベントから呼び出されます。プログラムが初期化されると、これらのメガクラスの1つから関数が呼び出され、すべてのフォームをインスタンス化します。信じられないほど多くの統計や定数もあります。

私は定数を壊して、それらのための特定のクラスを作成しました。私はメガクラスをより小さく、より管理しやすい(そして責任に特化した)クラスに分解していますが、これらのフォームをすべてインスタンス化するこの非常に大きな初期化関数があります。

このように、私の質問は(最終的に)次のようになります。私はリソースの悪夢の上に書いたことはありますか?または、これは通常のVB/Winformデザインパターンのいくつかの並べ替え私は保つ必要がありますか?フォームを呼び出すボタンがクリックされたときに各フォーム/クラスがインスタンス化されるように、これを書き直すべきですか?

ありがとうございます。より具体的な情報を提供できる場合は、コメントして編集します。

+3

ありがとうございました。このデベロッパーは置き換えられました。 – Phiter

+1

私には貧弱なデザインのように聞こえます。一度に2つのフォームをインスタンス化することは理解できますが、すべてのフォームではありません。 IMOを使用する準備ができたときにのみインスタンス化する必要があります。ログインフォームが完了した後にメインフォームを表示する準備が整っていない限り、それでも、私はまだ自分のようにはしません。だから、あなたの方法で書いて、必要に応じてインスタンス化するだけです。はるかに良いです。 – ManoDestra

+1

親指は(これはDB接続についてたくさん聞こえますが、実際にはほとんどすべてのクラスに適用されます)、可能な限り早くインスタンス化し、できるだけ早く処理してください。これにより、GCがオブジェクトを効率的にファイナライズできるようになります。長期間保存されたオブジェクトは、後のラウンドのGCファイナライズに移行するため、かなりの時間がかかります。 – Kevin

答えて

4

私はリソースの悪夢の上に書いたことはありますか?

はい

それとも、これは私が維持する必要があり、通常のVB/Winフォームのデザインパターンのいくつかの並べ替えですか?

絶対にありません。 VBとC#では、システムの設計はほとんど同じです。非常に小さな例外を除いて、言語の違いは単なる構文です。

フォームを呼び出すボタンがクリックされたときに各フォーム/クラスがインスタンス化されるように書き直す必要があります。そのため、閉じたときに処分できますか?

はい、あります。フォームは、C#で書く場合と同じように動作するはずです。もちろん、オリジナルの開発者がグローバルな状態を非常に好んだら、フォームの外観と次の外観の間にあらゆる種類の状態が潜んでいる可能性があります。

弱い開発者に迷惑をかける可能性のあるVBの機能がいくつかあります。モジュール(本質的には静的なクラスですが、時にはより便利です)が存在すると、ある人がより多くのグローバルな状態を追加するように誘惑されることがあります。また、VBでは、必要に応じて、クラスと同じ名前の各フォームのグローバルインスタンスを1つずつ自動的に作成します。これにより、開発者は、フォームをクラスとオブジェクトとして混同し、必要に応じて構築および廃棄するのではなく、フォームの単一インスタンスにつなげることができます。

+0

あなたの回答と上記のコメントを感謝します。これはやや頭がおかしくなってしまいますが、少なくともそれは私が受け取ったものよりも良いものになるでしょう! – Kiel

関連する問題