このアンチパターンの名前はどこかにあると思います。しかし、私はそれを知るためのアンチパターン文学に十分に精通していません。
次のシナリオを検討してください。
or0
クラスのメンバー関数です。良くも悪くも、それはクラスメンバー変数に大きく依存しています。プログラマAがやってきて、をor0
呼び出すのor0
ではなく、クラス全体をコピーして名前を変更するような機能が必要です。私がor0
言うように、それはその機能のためにメンバー変数に大きく依存しているので、彼女が呼び出さないと思います。または、彼女はジュニアプログラマであり、他のコードから呼び出す方法を知りません。これでor0
、c0
(コピーの場合はc)が得られました。私はこのアプローチでプログラマーAを完全に責めることはできません。全員が厳しい納期に直面し、コードをハッキングして作業を完了させます。
何人かのプログラマーがメンテナンスしているor0
ので、バージョンになりorN
ます。 c0
現在バージョンcN
です。残念ながら、クラスを含むクラスを維持しているほとんどのプログラマーはor0
完全に気付いていないようでしたc0
-これは、DRY原理の知恵について私が考えることができる最も強力な議論の1つです。また、のコードの独立した保守もあった可能性がありますc
。いずれにせよ、と思われるor0
とc0
、互いに独立して維持しました。そして、喜びと幸せ、エラーはで発生しcN
ていないのに発生していますorN
。
だから私はいくつかの質問があります:
1.)このアンチパターンの名前はありますか?私はこれが起こるのを見たので、これが名前付きのアンチパターンではないと信じるのは難しいことがよくあります。
2.)私はいくつかの選択肢を見ることができます:
a。)orN
必要なすべてのメンバー変数の値を指定するパラメーターを取るように修正。次に、必要なすべてのパラメーターを渡しcN
て呼び出すように変更しますorN
。
b。)からorN
に修正を手動で移植してみてくださいcN
。(私はこれをしたくありませんが、現実的な可能性があります。)
c。)orN
-- cN
again、yuckに再度コピーしますが、完全を期すためにリストします。
d。)どこcN
が壊れているかを把握し、とは独立して修復しorN
ます。
代替aは長期的には最良の修正のように見えますが、お客様がそれを実装することを許可するかどうかは疑問です。物事を正しく修正するために時間やお金を費やすことはありませんが、同じ問題を40または50回修復するための時間とお金は常に必要ですか。
誰かが私が考慮しなかったかもしれない他のアプローチを提案できますか?