1

私は現在、多数の計算結果を持つ文書とテーブルを生成するレガシーアプリケーションのリファクタリングに取り組んでいます。これはもともと長いスコープで変数スコープを考慮して書かれていないため、(C#にもかかわらず)変数が必要に応じて参照される可能性があります。以前に計算された変数を含む特定の計算を持つ数百の変数があります。あなたはこのような何かを持っているコードの一部に私が何を意味するかの実例を与えることOOPへの相互接続された計算における何百ものグローバル変数のリファクタリング

...

a1a[0] = 0.318 * apples[0]; 
a1a[1] = 0.312 * apples[1]; 
a1a[2] = // and so on... 

次に、コードのいくつかの他の部分で:

for (i = 0; i < 50; i++) 
{ 
    b1[i] = a1a[i] + a1b[i]; 
    something_else[i] = b1[i] + a1c[i]; 
    c2[i] = c1[i] + c1b[i]; 
    // and some others... 
} 
:後で最後に
for (i = 0; i < 50; i++) 
{ 
    a1b[i] = total_a * some_other_variable_calculated_somewhere[i]; 
    a1c[i] = total_a * yet_another[i]; 
    // and probably some more in this block... 
} 

これはリファクタリングの一部であり、他の部分はうまくいきましたが、ほとんどの場合、さまざまなクラスと小さなメソッドに計算を抽出することができました。ラッピングとアンラッピングを多く必要とするため、さらに冗長で、おそらく編集が面倒です。

実際の質問:これが私の最初の時間は、この種のプロジェクトに取り組んでいると私は一般的には私のキャリアにかなり新しいですので、誰でも

A)を持っていれば、私は思ったんだけど

本質的にグローバル変数であるものと相互接続された計算の長い線形スクリプトをどのようにしてオブジェクト指向設計に入れるかについてのアドバイス、および/または

b)これらの種類の問題を議論するリソースの方向そして人々が取るかもしれないアプローチは?

私はこれがユニークな印象を受けることはありませんが、私は本当にそのリソースを見つけるのに苦労しています。私はこのプロジェクト自体にどれだけのものを適用することさえできていないのか分かりませんが、私はこれらの問題をどのように処理するかがわかっていると思います。

ご協力いただければ幸いです!

+0

良いバージョン管理システムが必要になりますので、常に元の動作バージョンのリライトに戻すことができます。良いテストスイートが必要なので、いつ復帰する必要があるかを知ることができます。 – rossum

答えて

0

私はマイケルフェザーズの「効果的なレガシーコードの使用」をお勧めします。 https://www.goodreads.com/book/show/44919.Working_Effectively_with_Legacy_Code

コードを冗長にする中間のリファクタリングについては、あまりにも心配しません。グローバル変数を取り除き、コードを読みやすくしておくと、初期の冗長性がなくなるでしょう。

関連する問題