過去数年にわたって、多くの著者が...高レベルのソフトウェアアーキテクチャを特徴付けるパターンを提示してきました...理想的な世界では、すべてのシステムが1つ以上のそのような高レベルパターンの模範になります。しかし、これはそうではありません。実際に優勢なアーキテクチャについてはまだ議論されていません:BIG BALL OF MUD。
ビッグボールオブマッドは、無秩序に構造化され、広大で、ずさんな、ダクトテープとベイリングワイヤー、スパゲッティコードジャングルです。私たちは皆それらを見てきました。これらのシステムは、無秩序な成長と繰り返された適切な修復の紛れもない兆候を示しています。情報はシステムの遠く離れた要素間で無差別に共有され、ほとんどすべての重要な情報がグローバルまたは複製になります。システムの全体的な構造が明確に定義されていない場合があります。もしそうなら、それは認識を超えて侵食された可能性があります。細心の注意を払ったプログラマーは、これらの泥沼を避けます。建築に無関心で、おそらく、これらの失敗した堤防の穴にパッチを当てるという日々の雑用の慣性に慣れている人だけが、そのようなシステムで作業することに満足しています...
なぜシステムは泥の大きなボールになるのですか?時々、大きくていシステムがTHROWAWAY CODEから出現します。THROWAWAY CODEは、一度だけ使用され、その後破棄されることを意図した迅速で汚いコードです。ただし、そのようなコードは、カジュアルな構造と不十分または存在しないドキュメントにもかかわらず、多くの場合、独自の寿命を取ります。動作するので、なぜそれを修正するのですか?関連する問題が発生した場合、それを解決する最も迅速な方法は、適切に一般的なプログラムをゼロから設計するのではなく、この作業コードを適切に変更することです。時間が経つにつれて、単純な使い捨てプログラムがBIG BALL OF MUDを生みます。
明確に定義されたアーキテクチャを備えたシステムでさえ、構造的な侵食を受けやすい傾向があります。成功するシステムが引き付ける要件の変化の容赦ない猛攻撃は、徐々にその構造を弱体化させる可能性があります。PIECEMEAL GROWTHにより、システムの要素が制御されない方法で無秩序に広がり、かつては整然としていたシステムが大きくなりすぎています。
このような無秩序な増加が衰えずに続くと、システムの構造がひどく損なわれ、放棄しなければならない可能性があります。減衰する近隣の場合と同様に、下向きのらせんが続きます。システムがますます理解しにくくなるため、メンテナンスはより高価になり、より困難になります。優秀なプログラマーはそこで働くことを拒否します。投資家は資本を引き出します。しかし、近隣地域と同様に、この種の衰退を回避する方法、さらには逆にする方法があります。宇宙の他のものと同様に、エントロピー力に対抗するにはエネルギーの投資が必要です。ソフトウェアのジェントリフィケーションも例外ではありません。ソフトウェアでエントロピーを阻止する方法は、リファクタリングすることです。リファクタリングへの持続的なコミットメントは、システムが泥だらけの大きなボールに陥ることを防ぐことができます...
- ...泥の最も効果的な敵の1つは太陽の光です。複雑なコードを精査矢印にさらすと、そのリファクタリング、修復、およびリハビリの段階を設定できます。コードレビューは、コードを日光にさらすために使用できるメカニズムの1つです。