泥の倧きな塊

こんにちは、Habr ブラむアン・フットずゞョセフ・ペヌダヌの蚘事「 泥の倧玉 」の翻蚳を玹介したす。



翻蚳者から1999幎の倏にブラむアン・フットずゞョセフ・ペヌダヌが「泥の倧玉」の蚘事を曞いた。 圌女は、゜フトりェア開発の最も䞀般的なアンチパタヌン、それらの発生ず開発の理由に぀いお話しおいたす。 刊行から18幎以䞊が経過しおいるにもかかわらず、蚘茉されおいる問題は消えおいないため、執筆の倧郚分は今日に関連しおいたす。 これは3぀の蚘事の最初の郚分であり、残りは近い将来に投皿したいず考えおいたす。



はじめに



近幎、数人の著者が䞀床に[Garlan and Shaw、1993] [Shaw、1996] [Buschmann and others、1996] [Meszaros、1997]により、PIPELINEパむプラむンやLAYERED ARCHITECTUREマルチレベルアヌキテクチャ。



理想的な䞖界では、すべおのシステムが1぀以䞊の同様の高レベルパタヌンの䟋になりたす。 ただし、実際にはそうではありたせん。 珟圚支配的なアヌキテクチャはただ議論されおいたせん。 これは、泥の倧きなボヌルたたは倧きな汚れです。



LARGE DIRT LOCKは䞍泚意に蚭蚈された構造をしおおり、むち打ちで生であり、たるでホむップテヌプずワむダヌ、ゞャングルに絡たっおいるスパゲッティコヌドのようです。 私たちは皆、そのようなコヌドを芋たした。 これらのシステムでは、無秩序な成長ず継続的なやり盎しの兆候を簡単に芋぀けるこずができたす。 情報はシステムのリモヌト芁玠間で無差別に配信され、倚くの堎合、重芁な情報はすべおグロヌバルたたは耇補されたす。 システム党䜓の構造が正確に決定されたこずはありたせん。 存圚する堎合、オリゞナルが認識できなくなるほど砎壊されたした。 アヌキテクチャを少し理解しおいるプログラマは、この沌地を迂回したす。 そしお、圌女があたり気にかけおいない人、そしおおそらく、毎日システムに穎を埋めたい人だけが、そのようなシステムの仕事に満足しおいたす。



それがそうであっおも、このアプロヌチは生き続け、繁栄したす。 このアヌキテクチャはなぜそんなに人気があるのですか 圌女は圌女のように悪いですか たたは、より信頌性の高い゚レガントな代替品ぞの道の䞭間駅ずしお機胜できたすか 優れたプログラマヌがこのようないシステムを䜜成する理由は䜕ですか これを回避できたすか そしおそれは必芁ですか これらのシステムをどのように改善できたすか



この蚘事では、次の7぀のパタヌンを瀺したす。





システムがなぜダヌトの倧きな塊に倉わるのですか ワンタむムコヌドTHROWAWAY CODEの䜜成により、倧きくお恐ろしいシステムが珟れるこずがありたす。 ワンタむムコヌドは、コヌドのドラフトバヌゞョンであり、䞀床だけ䜿甚しおから砎棄する必芁がありたす。 ただし、そのようなコヌドは、未開発の構造、䞍十分な蚭蚈のドキュメント、たたは䞍圚にもかかわらず、独自の生掻を送り始めるこずがありたす。 それは動䜜したす、なぜ䜕かを修埩するのですか 問題が発生した堎合、それを解決する最速の方法は、䜜業コヌドを倉曎するこずです。 これにより、プログラムを最初から䜜成する必芁がなくなりたすが、時間の経過ずずもに、単玔な1回限りのプログラムで倧芏暡なダヌトが発生したす。



明確に定矩されたアヌキテクチャを備えたシステムでさえ、厩壊のリスクを抱えおいたす。 成功するシステムは、垞に倉化する芁件の圱響䞋にあり、その構造が埐々に損なわれたす。 クリヌンなシステムは、構造の段階的な成長PIECEMEAL GROWTHにより倧きくなり、システム芁玠は制埡䞍胜に成長し始めたす。

この成長が止たらない堎合、システムの構造は、攟棄しなければならないほど乱れおいたす。 枛少しおいる郜垂の゚リアの堎合のように、この状況は増加するこずにより悪化したす。 システムの理解が難しくなるに぀れお、そのサポヌトはより耇雑になり、より高䟡になりたす。 優れたプログラマヌは、そのような構造での䜜業を拒吊したす。 投資家は資本を匕き出したす。 さらにもう1぀、郜垂郚ず比范するこずができたす。この䜎䞋を回避し、さらには逆転させる方法がありたす。 私たちの䞖界のあらゆるものず同様に、反察の゚ントロピヌ力にぱネルギヌ入力が必芁です。 ゜フトりェアのゞェントリフィケヌションも䟋倖ではありたせん。 ゜フトりェアで゚ントロピヌを停止する1぀の方法は、再蚭蚈するこずです屈折噚。 定期的なリファクタリングぞの取り組みにより、システムが倧芏暡なダヌトに陥るのを防ぐこずができたす。



深刻な措氎、火灜、たたは敵察行為により、䜏民の避難ず郜垂のれロからの再建が必芁になる堎合がありたす。 倚くの堎合、倉曎は個々の建物たたは地区に圱響し、郜垂自䜓が機胜し続けたす。 䞀床確立されたKEEPING IT WORKING戊略は、郜垂の成長ず再開発の間、郜垂の生掻を守りたす。



システムずその構成芁玠はさたざたな速床で進化したす。 より速く倉化したシステムず芁玠は、ゆっくりず倉化しおいるシステムず芁玠ずは異なりたす。 それらの間に圢成されるシフトされた局せん断局は、障害の境界たたは線に䌌おおり、長期間持続する抜象的なシステム構造の出珟に貢献したす。



衰退を制埡し始める簡単な方法は、スラム街を囲み、その呚りに矎しいファサヌドを蚭眮するこずです。 この戊略を「敷物の䞋で掃く」ず呌びたす。 より深刻なケヌスでは、代替案を芋぀けるのが難しいため、党員が解䜓し、れロから新芏に建蚭を開始したす。 完党な再構築が必芁な堎合RECONSTRUCTION、保存されるのは基瀎ずなるパタヌンのみです。



䞀芋、これらはアンチパタヌン[Brown and others、1998]たたは停パタヌンのように芋えるかもしれたせんが、少なくずも通垞の意味ではそうではありたせん。 実際、これらのアプロヌチは、私たちが説教するこずず実践するこずの間のギャップを埋めたす。 それでも、これらのパタヌンを疑う読者もいたす。 したがっお、すべおのカヌドをテヌブルに眮き、自分の䜍眮を宣蚀するのが賢明です。 私たちは優れた建築を目指しおいたす。



私たちの䞻な仕事は、これらの沌地の排氎を支揎するこずです。 可胜であれば、建築の衰退を防止、停止、たたは逆転させなければなりたせん。 これを行う方法を瀺したす。 最も高床なケヌスでは、いく぀かのアヌキテクチャの倒錯を削陀する必芁がありたす。



同時に、この泥沌に匕き蟌たれた人々を非難する぀もりはありたせん。 そのような人々に察する私たちの態床は、「私たちは眪に反察しおいたすが、眪人ではありたせん。 問題はさらに深い。 すべおの裏庭に倧理石の柱を立おる必芁はありたせん。 団結しおアヌキテクチャをバックグラりンドに匕き蟌み、機胜的なタスクのみを実行できる匷力な力がありたす。 特に゜フトりェア開発の初期段階。 アヌキテクチャを開発する機䌚ず理解は、ほずんどの堎合、゜フトりェアラむフサむクルの埌の段階ですでに珟れおいたす。



制埡されたカオスは、合理的な範囲で、建蚭䞭の自然なプロセスであり、すべおが埌で修正されれば、これに同意するこずができたす。 ただし、耇雑なシステムは、問題を未熟に理解しおいるこずの信頌できる反映であるこずに泚意しおください。 原則ずしお構築できるシステムのクラスは、少なくずも最初の段階で優雅に構築できるシステムのクラスよりもはるかに倧きいです。 老朜化した耇雑なアヌキテクチャは、あたり理解されおいないドメむン知識のドメむンの芞術䜜品になる可胜性がありたす。 しかし、話はそこで終わりではありたせん。 そのようなドメむンでの䜜業の経隓を積むず、より倚くの゚ネルギヌを導き、郚分的に正しいアヌキテクチャの抜象化を収集できるようになりたす。



ここで説明するパタヌンは、互いに別個に考慮されるこずはありたせん。 それらを単䞀のコンテキストに結合したした。このコンテキストには、私たちや他の著者によっお蚘述された他のパタヌンもありたす。 特に、[Foote and Opdyke、1995]および[Coplien、1995]で説明されおいるラむフサむクルパタヌン、プロトタむピングフェヌズプロトタむプフェヌズ、拡匵フェヌズ拡匵フェヌズ、および統合フェヌズ統合フェヌズず比范したす。 たた、゜フトりェアテクトニクスパタヌンSOFTWARE TECTONICS[Foote and Yoder、1996]および構造蚭蚈パタヌン[Roberts and Johnson、1998]ず比范しおください。



この章では、䞻に病気に぀いお説明したしたが、䞊蚘のパタヌンはすべお、この病気の治療法になるず考えおいたす。 ぀たり、フィヌドバックを備えた柔軟で適応性のある開発プロセス。蚭蚈およびリファクタリングは、アプリケヌション内およびそれ以降の各アヌティファクト、コンポヌネント、および構造のラむフサむクルに適甚されたす。



力



倚くの力が、きちんずしたアヌキテクチャを持぀組織でさえ倧芏暡な泥の塊を䜜り始めるずいう事実に貢献しおいたす。 これらの遍圚する「グロヌバル」な力は、前述のすべおのパタヌンに圱響したす。 これらの力の䞭で、以䞋を区別したす。



時間 特定の蚭蚈たたは決定の長期的なアヌキテクチャの結果をすべお分析するのに十分な時間はありたせん。 システムの構造が優れおいおも、アヌキテクチャの問題はより実甚的な偎面に取っお代わりたす。



゜フトりェアアヌキテクチャが平凡であるこずが倚い理由の1぀は、コスト、アむデアから実装たでの時間、プログラマのスキルなど、珟圚の問題に取っお代わるこずです。 倚くの堎合、建築は莅沢品や無駄なものず芋なされたす。 建築はしばしば無芖され、無芖されさえしたす。 もちろん、建築に察するそのような態床が発達したのは悪いこずですが、これは理解できたす。 アヌキテクチャは、継続的な泚意が必芁な領域です。 開発䞭の補品が成功し、有望であるこずを望む堎合、たず第䞀に、䞊で曞いたより差し迫った問題に察凊する必芁がありたす。 たた、優れたアヌキテクチャの利点は、補品がすでに完党に圢成され、再利甚可胜なコンポヌネントが出珟するラむフサむクルの埌期に珟れたす[Foot and Opdyke、1995]。



アヌキテクチャは、垂堎の芁件を満たすこずを目的ずしたリ゜ヌスを消費するリスクず芋なすこずができたす。 たたは、さらに有利な基盀を築く機䌚ずしお。



未熟なアヌキテクチャは、進化するシステムの利点になりたす。デヌタず機胜は、人為的なアヌキテクチャの制玄を受けないシステムで自然な䜍眮を占めるこずができるからです。 未熟な、性急なアヌキテクチャは、アヌキテクチャの欠劂よりも倧きな危険を䌎いたす。なぜなら、実蚌されおいないアヌキテクチャの仮説は、アヌキテクチャのさらなる発展を劚げる足etterに倉わるからです。



コスト 特に新しい゚リアを探玢する堎合、アヌキテクチャは高䟡です。 システムが既に機胜しおいる堎合、適切なアヌキテクチャを蚭蚈するこずは無意味な莅沢のようです。 開発ぞの投資は通垞、すぐには正圓化されたせん。 さらに、補品を垂堎に出すたでに長い遅延が生じる可胜性がありたす。 建築ぞの投資から利益を埗るのは誰ですかたた、い぀投資収益率を期埅できたすか すぐに垂堎に投入できる迅速で「生の」プロゞェクトの資金は、より簡単に䜿甚されたす。 耇雑なアヌキテクチャの開発ず分析のための資金は、あたり望みなく投資されたす。 すでに倒産した堎合、建築資産の費甚を回収するこずは困難です。



自分で高品質のアヌキテクチャを理解し、開発できるプログラマは、高䟡なスペシャリストずしおの評刀がありたす。 プログラマの䜜業のコストは、高䟡なシステムが時期尚早に衰退しお道埳的に陳腐化した堎合に発生するコストず比范しお掚定する必芁がありたす。 良いアヌキテクチャが高䟡だず思うなら、悪いアヌキテクチャを詊しおください。



経隓 人が時間ずアヌキテクチャの問題に取り組む意欲がある堎合でも、特定の分野での圌の経隓たたは経隓の欠劂は、特にシステム開発の初期段階でシステムに導入される可胜性のあるアヌキテクチャ䞊の困難を制限できたす。 䞀郚のプログラマヌは、新しい抜象抂念を発芋しお開発できる環境で成功したすが、他のプログラマヌは、より限られた環境Smalltalk察Visual Basicなどで快適な䜜業を奜みたす。 倚くの堎合、システムの初期バヌゞョンは、特定の問題を解決するためにプログラマヌがさたざたな芁玠を導入しようずする䞀皮の実隓ツヌルです。 そしお、問題ずその解決策が芋぀かった堎合にのみ、これらの埋め蟌み芁玠間にアヌキテクチャの境界が珟れ始めたす。 経隓䞍足にはさたざたな圢がありたす。 卒業生の絶察的な未経隓がありたす。 優れたアヌキテクトは、特定の分野での経隓がなくおも、コヌドを完党に知っおいる特定の分野の専門家でなくおも、アヌキテクチャの開発経隓がない堎合がありたす。



スタッフの離職は組織の組織の蚘憶を損なう可胜性があり、疑わしい劥協策ずしお、組織に「新鮮な血」を泚ぐ必芁がありたす。 ボスを倉曎するず、それぞれが奜みに合わせお材料を远加するため、皿党䜓が台無しになりたす。



スキル プログラマヌは、異なるレベルのスキル、異なる専門胜力、気質、気質を持っおいたす。 優れた抜象化を熱心に怜玢するプログラマヌもいれば、前任者が残した耇雑なコヌドの䞖界に粟通しおいるプログラマヌもいたす。 圌らは、知識のさたざたな分野ぞの粟通床ず、新しい技術を孊ぶ胜力が倧きく異なりたす。 さらに、蚀語ずツヌルの䜿甚に関しお異なる蚭定がありたす。



可芖性建物は具䜓的な物理構造です。 建物自䜓を芋るこずができたす。 建物の建蚭を芳察できたす。 あなたは䞭に入り、デザむンを賞賛たたは批刀するこずができたす。



プログラムのナヌザヌむンタヌフェむスは、そのアヌキテクチャが建物の倖郚に組み蟌たれおいるように、プログラムのパブリックむメヌゞです。 ただし、建物ずは異なり、プログラムを䜜成した人だけがプログラムの内郚を芋るこずができたす。



プログラムは個々の芁玠で構成されおいたす。 プログラムに察する私たちの認識は、これらの芁玠がどのように提瀺されるかに䟝存したす。 䞀郚のデザむナヌは、モデリング蚀語たたはPowerPointむメヌゞを䜿甚するこずを奜みたす。 通垞の説明のような他の人。 たた、コヌドを芋たい人もいたす。 アヌキテクチャを提瀺する方法は、このアヌキテクチャの認識に圱響を䞎えたす。それが良いか悪いか、明確か耇雑か、゚レガントか汚いかなどです。



実際、アヌキテクチャを無芖する理由の1぀は、そのほずんどがmost玢奜きな目から隠されおいるこずです。 システムが機胜し、むンストヌルできる堎合、誰が内郚からの倖芳を気にしたすか



耇雑さ ダヌティアヌキテクチャが出珟する理由の1぀は、アプリケヌションが実行される領域の耇雑さが゜フトりェアに反映されるこずが倚いこずです。 ブルックスは、この珟象の甚語「固有の耇雑さ」を䜜り出したした[Brooks、1995]。 蚀い換えれば、問題自䜓も理解されおいないか、少なくずも完党には理解されおいないため、゜フトりェアは耇雑で理解䞍胜になりたす。 倚くの堎合、システムの組織は、このシステムを䜜成した組織の歎史を反映しおいたすCONVEY LAW [Coplien、1995]に準拠。 システムの芁玠間で基本的な境界が既に確立されおいるため、既存の関係を再考するこずはしばしば困難です。 これらの関係は、実際の郜垂で芋られる「地区」境界の特城を垯びるこずがありたす[Brand、1994]。 アプリケヌションがこれらの境界を超えた自由な察話を必芁ずする堎合、倧きな問題が発生したす。 システムはも぀れたボヌルに倉わり、最初にあった構造の残骞でさえ、たすたす劣化し始めたす。



倉曎 アヌキテクチャは、その埌の倉曎はアヌキテクチャがたたがるプロゞェクト空間の䞀郚に限定されるずいう、未来に関する仮説です。 もちろん、宇宙はそのような仮定ず予枬をしようずする私たちの詊みに笑いかけ、完党に予想倖の䜕かを投げかけたす。 私たちが知るこずができる問題は私たちの泚意から完党に陀倖されたしたが、突然、それは私たちが䞀緒に働くずは思わなかった新しいクラむアントにずっお非垞に重芁であるこずが刀明したした。 そのような倉曎は、そのような新しい䞍枬の事態が決しお起こらないずいう完党な確信に照らしお採甚された基本的なアヌキテクチャ䞊の決定ずは正反察になりたす。 「正しい」決定は、システムの完党な再蚭蚈かもしれたせん。 しかし、最も可胜性の高い結果は、新しい芁件を満たすためにシステムのアヌキテクチャが適切に違反されるこずです。



芏暡 倧芏暡プロゞェクトの管理は、小芏暡プロゞェクトでの䜜業ずは異なり、質的に異なる問題です。 これは歩兵郚隊党䜓を戊闘に導き、特殊郚隊の小さな分隊を指揮する方法です。 「分割しお埁服する」-これは、本質的に、芏暡によっお匕き起こされる問題に察する必芁か぀䞍十分な解決策です。 OOPSLA '86でのスピヌチでアランケむは、「良いアむデアは必ずしも拡倧瞮小するずは限りたせん」ず述べたした。 この芳察は、ヘンリヌリヌバヌマンからの反応を匕き起こしたした。圌は「぀たり、悪いアむデアを拡倧する必芁があるのか​​」ず尋ねたした。



倧口埄



圌は

スラム街

スパゲッティコヌド



スラム街は䞍気味で乱雑で貧しい地域です。 おそらく誰もが圌らには良いものがないこずに同意するでしょうが、スラムの出珟に寄䞎する客芳的な理由がありたす。 圌らは䜕に関連しおいたすか



スラム䜏宅は、通垞、最も単玔なツヌルを䜿甚しお、シンプルで安䟡な材料から構築されたす。 スラムは、比范的未熟な劎働力を䜿甚しお構築できたす。 たた、通垞の意味では劎働力は「未熟」ですが、スラム街の建物の建蚭ず維持は劎働集玄的なプロセスになりたす。 専門化は実際には必芁ありたせん。 家は䞻に居䜏者自身によっお建おられ、改修されおいたす。 むンフラストラクチャヌは、アクション、資本、特別なリ゜ヌス、特別な機噚、スキルの調敎を調敎する必芁があるため、スラム街はむンフラストラクチャヌを気にしたせん。 スラムの成長を蚈画たたは制埡するこずも事実䞊存圚したせん。 スラム街は、䜏宅の必芁性、未熟緎劎働者の過剰䟛絊、および蚭備投資の䞍足がある堎所に珟れたす。 圌らは䜏宅の差し迫った地元のニヌズを満たし、問題を解決するために利甚可胜な資源を集めおいたす。 より掗緎されたアヌキテクチャのアプロヌチは、埅぀こずができる莅沢です。



スラムを劎働条件に維持するこずは劎働集玄的なプロセスであり、倚くのスキルが必芁です。 即垭の修理を行うこずができ、即垭の玠材のみが利甚可胜でなければなりたせん。 屋根を修理し、衛生状態を提䟛できる必芁がありたす。 ただし、成熟した経枈で芳察できる資栌は実質的にありたせん。

アヌキテクチャの芳点から芋るず、今日の゜フトりェアシステムは倚すぎお、このようなスラムに䌌おいたす。 倚くの堎合、ツヌルずむンフラストラクチャぞの投資では䞍十分です。 ツヌルは通垞原始的であり、ラむブラリや環境などのむンフラストラクチャは未開発です。 システムの個々の郚分は怜蚌なしで開発され、むンフラストラクチャずアヌキテクチャの欠劂により、システムの䞀郚の問題が悪化し、システムの隣接する郚分に感染したす。 システムの完成期限は近づいおいるため、建築の優雅さを達成するこずは䞍可胜に思えたす。



システムの開発が近づいおいるずき、実際のナヌザヌは初めおこのシステムで䜜業を開始できたす。 , , , . , Brooks [Brooks, 1995], , / , - .



. Stewart Brand [Brand, 1994] , , , , . , , . , , . .



, , , . , , , , . , .



.



: — . , , , , , ; . . , . , , , . , , , .



: (Ralph Johnson) , « , ». , , -.



: , , , , , .



, — “ ”, — , . , , .



, , .



(Gabriel) « , » [Gabriel, 1991]. , ? « » ? ?



, ? . . .



, [Buschman, 1996], , , . , , , .



. , . . . . . . , , , , . ? ?



-, , , , . , . , . , , , . , , .



, — , « ». , , . , , .



(Kent Beck) : . . . [Beck, 1997]. « » , , . « » , , , , . « » , , , , . , , .



, , . «» «» . , , , .



— . , , . , — , .



. , , .



, . , , , . , . , , , . [Coplien, 1995], , , . [Foote Yoder, 1998a] , , . , . .



, , , , . , , , . , , . , , .



, . , . . . , .

, , . , . , . . . , .



, , . . . .



« » , , .



, , , — , , , . , , , . , , [Foote Opdyke, 1995]. (PROTOTYPE) (EXPANSION) . , , , “ ”. , , , , .



(Brian Marick) BIG BALL OF MUD ( ) . , , , , . , . 1970- (Lisp).

(THROWAWAY CODE), , ( « »).



(PIECEMEAL GROWTH) . , — « » (KEEP IT WORKING). (SHEARING LAYERS), , , (BIG BALL OF MUD).



[Foote Opdyke, 1995] , , .



, , (CONSOLIDATION PHASES) [Foote Opdyke, 1995], . (Extreme Programming) [Beck, 2000] .



[Brand, 1994] , , , , . , . (FREEDOM FROM CHOICE) [Foote, 1988] — , .



— . , , . — , , .



— [Beck, 2000]. , , . , . , .



, : . , , . . , , , , .



, . , , .



, , , . -. , .



. — . . . — . (RECONSTRUCTION) , . — .



[Vitruvius, 20 ..], : firmitas ( ), utilitas (), venustas (). . , . , , , .



2



オリゞナル蚘事



All Articles