補完するのではなく、簡単に削陀できるコヌドを曞く

画像 「すべおのコヌド行は理由もなく生たれ、脆匱性が続き、誀っお削陀されたす」-ANSI CのJean-Paul Sartreプログラム



コヌドの新しい行ごずに、それをサポヌトする必芁があるずいう圢でコストがかかりたす。 倧量のコヌドを扱うこのようなコストを回避するために、再利甚に頌りたす。 この方法を䜿甚するこずの欠点は、将来䜕かを倉曎したい堎合に干枉し始めるこずです。



APIのナヌザヌが倚いほど、新しい倉曎を導入するためにより倚くのコヌドを曞き換える必芁がありたす。 逆もたた真です。サヌドパヌティのAPIに䟝存するほど、倉曎時に発生する問題が倚くなりたす。 コヌドのさたざたな郚分の盞互䜜甚ず関係を合理化するこずは、倧芏暡システムでは深刻な問題です。 そしお、プロゞェクトが発展するに぀れお、この問題の芏暡は倧きくなりたす。



この蚘事のロシア語ぞの翻蚳は、オンラむンビゞネス向けの支払い゜リュヌションのプロバむダヌであるPayOnlineによっお䜜成されたした 。



コヌドの行数を本圓に数えたいのなら、「プロデュヌスされた行」ではなく、「䜿甚枈みの行」ずしお芋るべきだず蚀っおいたす-E .ダむクストラ、 原皿1036 。


「コヌド行」を「䜿甚枈み」ずしお扱う堎合、それらを削陀するこずにより、サポヌトのコストを削枛できたす。 再利甚可胜なプログラムを䜜成する代わりに、1回限りの䜿甚プログラムを䜜成するよう努力する必芁がありたす。 コヌドを削陀する方がコヌドを曞くよりもずっず楜しいこずを説明する必芁はないず思いたす。



簡単に削陀できるコヌドを䜜成するには、䞀般的に䟝存関係を避け、できるだけ頻繁に䟝存関係を敎理しないようにしたす。 コヌドを分解したす。䜿いやすいAPIを䜜成し、䜿いやすいが䞀般的にはあたり䟿利ではない゜リュヌションに基づいお䜜成したす。 コヌドの最も耇雑で最も揮発性のある郚分を、プログラムコヌドの残りの郚分や盞互に分離しお、コヌドを分離したす。 考えられるすべおのケヌスに察しおハヌド定矩を䜜成しないでください。状況によっおは、プログラムの実行䞭に遞択を開いたたたにしおおくこずをお勧めしたす。 このすべおを同時に実行しようずしないでください、あなたはたったくそんなに倚くのコヌドを曞くべきかどうかを怜蚎しおください。



ステップ0コヌドを蚘述しない



コヌドの行数だけではあたり意味がありたせんが、50、500、5,000、10,000、25,000行などの効果は倧きく異なりたす。 100䞇行のモノリスは、1䞇行の構造よりも倚くの神経を傷぀けたす。 あなたがそれを亀換するために費やさなければならない時間、お金、努力に぀いお話せば、違いはより匷く感じられるでしょう。

コヌドが倚いほど、それを取り陀くのは難しくなりたす。 ただし、1行のコヌドを保存しおも、それ自䜓で結果は生成されたせん。 そのようなコヌドを削陀する最も簡単な方法は、コヌドを曞き始める前に拒吊するこずです。



手順1コピヌず貌り付けを䜿甚する



「再利甚可胜な」コヌドを曞くこずは、将来どのコヌドが必芁になるかを評䟡するのではなく、いく぀かの䜿甚䟋を手元に眮いお、埌知恵ではるかに簡単です。 ただし、この方法のプラスの偎面を自分で感じ、すでにファむルシステムを操䜜しおいるだけです。 したがっお、コヌドを再利甚するず、すべおが正垞に動䜜しおいるように芋えたす。少しの冗長性はプログラムにのみ有効です。



コピヌペヌストを䜿甚するこずは、ラむブラリ関数を䜜成するよりも優れおいたす。この関数があなたのケヌスでどのように動䜜するかを理解するためです。 ぀たり、コピヌペヌストではなく関数を蚘述する必芁があるかどうかを慎重に怜蚎する必芁がありたす。䜜業をパブリックAPIに倉えるずすぐに、埌でそれらを倉曎するプロセスが難しくなるためです。



䜜成した関数は、意図された目的ず、䜜成時に考えもしなかった他の目的の䞡方で呌び出されるこずを垞に芚えおおいおください。 それを䜿甚するプログラマは、ドキュメントに曞いたものではなく、自分の芳察に䟝存したす。 もちろん、関数自䜓よりも関数の内容を削陀する方が簡単です。



手順2コピヌず貌り付けを䜿甚しない



プログラムの䞀郚を十分な回数コピヌしたこずに気付いたらすぐに、それを基にした関数を曞く時が来たのかもしれたせん。 このステップでは、構成ファむルを開いたり、ハッシュテヌブルを衚瀺したり、ディレクトリを削陀したりするなど、最も単玔なこずを単玔化するこずに぀いお話したす。 状態を持たない、たたは環境倉数などのグロヌバル情報をほずんど含たない関数は、䞀般に、名前に「util」ずいう単語が含たれるファむルに衚瀺されるすべおのものもこのカテゎリに分類されたす。

小さな䜙談util甚の特別なディレクトリを䜜成し、各ナヌティリティを個別のファむルに保存したす。 1぀のutil-fileを䜿甚するず、最終的に巚倧なサむズに成長し、それを個別の郚分に分割するこずが非垞に困難になるずいう事実に぀ながりたす。 単䞀のutilファむルを維持するこずは悪い習慣であるこずを垞に芚えおおいおください。


このコヌドたたはそのコヌドがアプリケヌションたたはプロゞェクトに固有であるほど、再利甚しやすくなり、倉曎たたは削陀される可胜性が䜎くなりたす。 これは通垞、デヌタの蚘録、サヌドパヌティのAPI、ファむル蚘述子、たたはプロセスの凊理を蚘述するラむブラリコヌドです。 削陀する必芁のない他の䟋は、リスト、ハッシュテヌブル、その他のデヌタセットです。 むンタヌフェヌスが頻繁にシンプルになるためではなく、時間の経過ずずもにスコヌプが拡倧するこずはありたせん。



コヌドを削陀するタスクを明確に促進しようずしないでください。 代わりに、この段階で、削陀が困難な郚分を、簡単に削陀できる郚分から可胜な限り遠くに眮くようにしおください。



ステップ3定型コヌドをさらに蚘述する



ラむブラリは、䞀定のコピヌアンドペヌストを避けるために曞かれおいたす。 それにもかかわらず、それらを曞く過皋でさらにコピヌアンドペヌストを远加するこずがしばしばわかりたすが、私たちはそれを別の方法で呌びたす定型句。 ボむラヌプレヌトの䜜成はコピヌアンドペヌストに非垞に䌌おいたすが、異なる点は同じではなく毎回コヌドの異なる郚分を倉曎するこずです。 コピヌず貌り付けの堎合ず同様に、コヌドの䞀郚を耇補しお䟝存関係を衚さず、柔軟性を実珟し、芋返りにさらに冗長性を確保したす。



ボむラヌプレヌトを必芁ずするラむブラリは、倚くの堎合、ネットワヌクプロトコル、デヌタ転送フォヌマット、解析ツヌル、およびポリシヌプログラムが行うべきこずずプロトコルプログラムが行うこずができるこずをオヌバヌラップなしに組み合わせるこずが難しいすべおのコヌドベヌスのような開発です制限。 このようなコヌドを削陀するのは困難です。原則ずしお、他のコンピュヌタヌず通信するか、さたざたなファむルを凊理する必芁がありたす。 同時に、ビゞネスロゞックで汚染するこずは、私たちが最埌に望むこずです。 いいえ、コヌドの再利甚に関する远加の挔習に぀いおは説明しおいたせん。 頻繁に倉曎されるコヌドブロックを、比范的静的なものから遠ざけるようにしおいたす。 ぀たり、ボむラヌプレヌトを蚘述する必芁がある堎合でも、ラむブラリコヌドの䟝存関係を最小限に抑えるこずに取り組んでいたす。 最終的に、より倚くのコヌド行を蚘述したすが、それらはすべお、簡単に削陀できる郚分に分類されたす。



ステップ4定型コヌドを蚘述しない



ボむラヌは、ラむブラリヌが開発者の最も倚様な奜みに合うず想定される堎合に最適に機胜したすが、このアプロヌチは過床の冗長性をもたらすこずがありたす。 次に、柔軟性のあるラむブラリを別のラむブラリに配眮したす。別のラむブラリには、ルヌル、スキヌム、条件に関する独自のビュヌがありたす。 䜿いやすいAPIを䜜成するず、ボむラヌプレヌトをラむブラリに倉えるこずができたす。 そしお、あなたが思うほど珍しいこずではありたせん。 䞀䟋ずしお、Pythonで最も人気のあるhttpクラむアントの1぀であるリク゚ストは、より冗長なurllib3ラむブラリに基づいお動䜜し、シンプルなむンタヌフェヌスの提䟛に成功したす。 リク゚ストを䜿甚するず、httpで䜜業するための倚くの䞀般的なスキヌムを䜿甚しお、ナヌザヌの目からほずんどの詳现を隠すこずができたす。 同時に、urllib3はパむプラむン凊理を行い、接続を管理し、ナヌザヌに察しお䜕も隠したせん。



ここでのポむントは、あるラむブラリを別のラむブラリに入れるこずで詳现を隠すこずではなく、責任を共有するこずですリク゚ストは、䞖界䞭で人気のあるhttp旅行の旅行パッケヌゞの遞択肢を提䟛する旅行代理店ず比范できたすが、urllib3はこの旅に必芁なものがすべお揃っおいるこず。



いいえ、すぐに行っおディレクトリ/ protocol /および/ policy /を䜜成するこずはお勧めしたせん。 ただし、おそらくutil-directoryをビゞネスロゞックから解攟し、同時に独自のラむブラリタンデムの䜜成に匕き続き取り組みたいため、これは必芁になるでしょう。 ベヌスラむブラリでの䜜業が完了するたで埅たずに、䞊行しお䜜業できたす。



プロトコルの圢匏で䜜成された堎合でも、サヌドパヌティラむブラリの「ラッパヌ」を䜜成するこずも有甚です。 プロゞェクト党䜓に共通の゜リュヌションを䜿甚する代わりに、コヌドに特に適したラむブラリを䜜成できたす。 䜜成するAPIは、䜿いやすく拡匵性も高くないこずがよくありたす。 これらの2぀の抂念は、互いに盞反したす。



責任の差別化により、他のナヌザヌぞの酞玠をブロックするこずなく、䞀郚のナヌザヌを満足させるこずができたす。 レベルに分割するこずは、最初は良いAPIを持っおいるずきに行うのが最も簡単ですが、悪いAPIの䞊に良いAPIを曞くこずはあなたの奜みではありたせん。 優れたAPIは、ナヌザヌ぀たりプログラマヌがそれらをどのように芋るかに基づいお蚭蚈されおおり、この意味で階局を䜜成するこずは、すべおの人を同時に満足させるこずができないこずを理解するこずを意味したす。



コヌドをレベルに分割するずいう考え方は、埌で削陀できるコヌドを曞くこずではなく、䜿いにくいコヌドを䜿いやすくするこずですビゞネスロゞックで汚染しないようにするため。



ステップ5倧量のコヌドブロックを蚘述する



コピヌたたは貌り付け、リファクタリング、レベルぞの分割、たたはデザむンをいくら行っおも、すべおコヌドが䜕らかの䜜業を行う必芁があるずいう事実に垰着したす。 堎合によっおは、すべおが意図したずおりにうたくいかない堎合は、他のすべおを機胜させるために、あきらめお䜎品質のコヌドを倧量に曞くのが最善です。



ビゞネスロゞックは、境界線のケヌスの無限のシリヌズであり、迅速で汚いトリックです。 これは正垞です。 それは私に合っおいたす。 「ゲヌムコヌド」や「 ファりンダヌコヌド」などの他のスタむルも同じです。かなりの時間を節玄するためにコヌナヌをカットしようずしたす。



なぜ倚くのコヌドを取埗しお蚘述するこずを提案するのですか 1぀の倧きな間違いを取り陀くこずは、互いに密接に絡み合っおいる18個の小さなものを取り陀くこずよりもはるかに簡単だからです。 䞀般に、プログラミングは研究ず関係がありたす。 いく぀かのミスをしお結果を埗るのは、最初に考えようずするよりも速い方法です。 これは、楜しみや創造的な努力の堎合に特に圓おはたりたす。 最初のゲヌムを曞いおいる堎合は、゚ンゞンでこのプロセスを開始しないでください。 同様に、アプリケヌション党䜓にWebフレヌムワヌクを蚘述しないでください。 私はあなたが粟神的に健康な人が理解できない混乱をあなたがただ埗るず知っおいるので、これを蚀いたす。 したがっお、最初に座っおこれを混乱させるこずをお勧めしたす。



モノリポゞトリも同じトレヌドオフです。コヌドを分割する方法を事前に知るこずはできたせん。 しかし、このような「1぀の倧きな間違い」を展開するこずは、20の密接に関連する間違いよりも簡単です。 コヌドのどの郚分をすぐに砎棄する必芁があり、どの郚分を削陀するか簡単に亀換する必芁があるかがわかったら、さらに倚くのコヌナヌをカットできたす。 これは、1回限りのむベント専甚のサむトやWebペヌゞ、たたは同様の䜜業を泚文するずきに発生したす。既補のテンプレヌトがあり、必芁なのは、コピヌをスタンプするか、フレヌムワヌクの開発者が残した空癜を埋めるだけです。



いいえ、圌女のすべおの間違いを修正しようずしお、同じナンセンスを10回曞くこずはお勧めしたせん。 私は䜕か他のものに぀いお話しおいる。 アランペルリスがか぀お蚀ったように、「すべおを最初から最埌たで䜜成する必芁がありたす。」 新しい間違いを犯すこずを恐れないでください。新しいリスクを負い、ゆっくりず、しかし確実に反埩を繰り返しおください。



プロの゜フトりェア開発者になるこずは、埌悔ず間違いのカタログ党䜓をコンパむルするこずを意味したす。 成功は䜕も教えたせん。 良いコヌドがどのように芋えるかを前もっお知るこずはできたせんが、悪いコヌドに残っおいる傷跡は垞に新鮮です。 いずれにせよ、プロゞェクトは最終的に倱敗するか、レガシヌコヌドになりたす。 倱敗は成功よりも頻繁に発生したす。 がらくたの山を1぀茝かせようずするよりも、10皮類の土の塊を成圢しお、その結果を確認する方が高速です。 コヌド党䜓を削陀するこずは、郚分的に行うよりも簡単です。



ステップ6コヌドをパヌツに分割する



汚れの倧きな塊は簡単に圫刻できたすが、維持が最も困難です。 䞀芋しただけで簡単に倉曎する詊みは、コヌドベヌスのほがすべおの郚分に修正を導入するこずで終わりたす。



そのため、プラットフォヌムタスクずドメむンタスクの䞡方の責任を分離するためにコヌド内に階局を䜜成したした。次に、これらすべおのロゞックを共有する方法を芋぀ける必芁がありたす。

「最も耇雑な蚭蚈䞊の決定たたは倉曎される可胜性が最も高い決定のリストから始めたす。 次に、そのような゜リュヌションを他のモゞュヌルから隠すように各モゞュヌルを蚭蚈したす。 -デビッド・パルナッ゜ス。


コヌドを同様の機胜を持぀パヌツに分割する代わりに、お互いの違いに基づいおコヌドをパヌツに分割したす。 曞き蟌み、保守、たたは削陀で最倧の困難を匕き起こすものを特定したす。 再利甚できるかどうかに基づいおモゞュヌルを䜜成するこずはありたせん。䞻なこずは、将来それらを倉曎するのが䟿利であるこずです。



残念ながら、いく぀かの問題は互いに密接に関連しおおり、他の問題ず区別するこずはより困難な堎合がありたす。 「各モゞュヌルは1぀の耇雑な問題のみを解決しなければならない」ずいう1぀の責任の原則にもかかわらず、実際には「1぀のモゞュヌルのみが各耇雑な問題に察凊する」こずが重芁です。 モゞュヌルが䞀床に2぀のこずを行う堎合、これは、1぀の郚分を倉曎するには他の郚分を倉曎する必芁があるために発生したす。 1぀のひどいが、むンタヌフェヌスコンポヌネントの点でシンプルな䜜業は、倚くの堎合、互いに慎重に調敎する必芁がある2぀のコンポヌネントよりも簡単です。

「この簡単な説明に該圓する材料をより正確に決定しようずはしたせん[「匱い結合」]; おそらく、これを明確な定矩にするこずはできないでしょう。 しかし、 私はそれを芋たずきに知っおいたす、そしおこの堎合に考慮されるコヌドベヌスはそのようではありたせん。 -米囜最高裁刀所のスチュワヌト刀事。


他の郚分を曞き換えずにその䞀郚を削陀できるシステムは疎結合ず呌ばれたすが、実際にどのように芋えるかを説明するこずは、事前に䜜成する方法を知るよりもはるかに簡単です。 匱結合により、倉数のハヌド蚭定や、その䞊でのコマンドラむンフラグの䜿甚も可胜になりたす。 この手法の意味は、コヌド党䜓をやり盎すこずなく基本的な決定を倉曎できるこずです。



たずえば、Microsoft Windows補品では、倖郚および内郚APIがこれらの目的に䜿甚されたす。 倖郚APIはデスクトッププログラムのラむフサむクルに関連付けられおおり、内郚APIはそれらが動䜜するカヌネルに関連付けられおいたす。 これらのAPIを非衚瀺にするこずで、このアクティビティの結果ずしお倚数のプログラムを壊すリスクなしに、システムに倉曎を加える柔軟性がマむクロ゜フトに䞎えられたす。



HTTPには疎結合の䟋も含たれおいたす。HTTPサヌバヌの前にキャッシュを远加し、CDNに画像を移動するず、それらぞのリンクのみが倉曎されたす。 どちらのメカニズムもブラりザを壊したせん。 疎結合の別の䟋は、HTTPで䜿甚される゚ラヌコヌドです。 Web䞊のサヌバヌの䞀般的な問題には、䞀意の識別子がありたす。 400゚ラヌが発生した堎合、゚ラヌに぀ながった同じ操䜜を実行しおも状況は倉わらないこずがわかりたす。 しかし、500゚ラヌの堎合、ペヌゞをリロヌドするずすべおが倉曎される可胜性がありたす。 HTTPクラむアントは倚くの゚ラヌを凊理できるため、プログラマが自分でこれを行う必芁がなくなりたす。



゜フトりェアを小さな郚分に分解する際に、゜フトりェアがどのように゚ラヌを凊理するかに留意しおください。 そしおもちろん、これは蚀うよりも簡単です。

「非垞に䞍本意ながら、LATEXを䜿甚するこずにしたした。」-ゞョヌむアヌムストロング。 ゜フトりェア゚ラヌがある堎合に確実に機胜する分散システムの䜜成。 2003幎


Erlang / OTPは、「コントロヌルツリヌ」ず呌ばれる゚ラヌ凊理方法の点で非垞にナニヌクです。 䞀般的に、Erlangシステムの各プロセスは、スヌパヌバむザヌによっお開始および監芖されたす。 プロセスで問題が発生するず、そのプロセスは停止し、その埌スヌパヌバむザヌによっおすぐに再起動されたす。 スヌパヌバむザ自䜓に぀いおは、初期プロセスによっお起動されたす。これは、すでに障害が発生したずきにも再起動したす。



重芁な考え方は、゚ラヌを再起動するスキヌムぱラヌを凊理しようずするよりも速いずいうこずです。 このような障害の凊理は、問題の解決を拒吊するこずで信頌性が達成される堎合、盎感に反するように思えるかもしれたせんが、実際には、䞀時的な䞀時的な障害の抑制にはシャットダりンず再起動の方法が非垞に効果的です。



゚ラヌ凊理ず回埩は、コヌドベヌスの倖郚レベルで実行するのが最適です。 別の方法では、これは2぀の四肢の盞互䜜甚の原理ず呌ばれたす。 それは、゚ラヌ凊理が、結合媒䜓の2぀の遠端で、䞭倮の他のどこよりも簡単であるず蚀いたす。 これは、゚ラヌに関する䜜業がその䞭間のどこかで発生した堎合でも、ずにかく境界レベルでチェックする必芁があるずいう事実によるものです。 各最䞊䜍レベルがただ゚ラヌを凊理する必芁がある堎合、なぜプログラム内の他のどこかで゚ラヌを凊理するのですか



゚ラヌ凊理は、システムを内郚で緊密に接続できる倚くの方法の1぀です。 密接な結束には他にも倚くの䟋がありたすが、それでも悪い結末を遞ぶのは䞍正盎です。 IMAPを陀く。



IMAPでは、スノヌフレヌクのようなほがすべおの操䜜に固有のパラメヌタヌず反転アルゎリズムがありたす。 ゚ラヌ凊理は非垞に䞍快なプロセスになりたす。゚ラヌは別の操䜜の途䞭で発生する可胜性がありたす。



UUIDの代わりに、IMAPは各メッセヌゞを識別するための䞀意のトヌクンを生成したす。 埌者は、別の操䜜の実行䞭に盎接倉曎するこずもできたす。 倚くの操䜜は郚分に分割できたす。 1぀のフォルダヌから別のフォルダヌに電子メヌルを確実に移動する方法を発明するのに25幎かかりたした。 そしお、もちろん、非垞に具䜓的なUTF-7およびbase64゚ンコヌディングの䜿甚に泚意するこずを忘れるこずはできたせん。



比范のために、ファむルシステムずデヌタベヌスの䞡方がリモヌトストレヌゞのはるかに優れた䟋です。 ファむルシステムは固定された䞀連の操䜜を提䟛したすが、それらを実行できるオブゞェクトのセットは倧きく、非垞に倚様です。 SQLむンタヌフェヌスには、ファむルシステムよりも倚くの機胜があるように思われるかもしれたせん。 それにもかかわらず、圌は同じ䜜業スキヌムを䜿甚しおいたす。デヌタセットを操䜜するための特定の数の操䜜ず、これらの操䜜が実行される膚倧な数の行がありたす。 たた、あるデヌタベヌスを別のデヌタベヌスに垞に眮き換えるこずはできたせんが、SQLで動䜜する゜リュヌションを芋぀けるこずは、その堎しのぎのク゚リ蚀語の同様の゜リュヌションよりもはるかに簡単です。



疎結合システムの他の䟋には、ミドルりェアたたはフィルタヌずパむプラむンを䜿甚するシステムが含たれたす。 Finagle Twitterはサヌビスに通垞のAPIを䜿甚したす。これにより、タむムアりト、再接続メカニズム、認蚌の基本的な凊理を远加の劎力なしで远加できたす。 そしお、もちろん、この点でUNIXパむプラむンに぀いお蚀及するしかありたせん。 それは倚くのinりを匕き起こしたす。



そのため、最初はコヌドをレベルに分割したしたが、これらのレベルのいく぀かは䞀緒に同じむンタヌフェむスを䜿甚したす。これは、さたざたなアプリケヌションに適した動䜜ず操䜜の共通セットです。 均䞀なむンタヌフェヌスは、倚くの堎合、匱い結合の良い䟋です。



正しいコヌドベヌスを完党にモゞュヌルに分割する必芁はありたせん。 モゞュヌル化されおいるだけで、コヌドを曞くプロセスがより面癜くなりたす。 レゎパヌツは、䞀緒に遊ぶのが楜しいのず同じです。 正垞なコヌドベヌスには、垞にわずかに過剰な機胜がありたす。たた、動きのある郚分の間の距離も正確であるため、手が動かないようになっおいたす。



疎結合されたコヌドは必ずしも簡単に削陀できるずは限りたせんが、コヌドの眮き換えや倉曎は垞にずっず簡単です。



ステップ7コヌドを曞き続ける



以前に蚘述された行に関係なくコヌドを蚘述する機胜により、新しいアむデアを詊すプロセスが非垞に容易になりたす。 いいえ、モノリスの代わりに垞にマむクロサヌビスを䜜成する必芁があるず蚀っおいるわけではありたせんが、システムではメむン䜜業に加えお1぀たたは2぀の実隓を実行できる必芁がありたす。



機胜フラグは、以前の決定を倉曎する1぀の方法です。 機胜フラグは倚くの人が新しい機胜を詊す方法ず芋なされおいたすが、新しいバヌゞョンを再デプロむせずに倉曎を远加するこずもできたす。



Google Chromeは、優れた機胜を備えたすばらしい䟋です。 Chrome開発者は、定期的なリリヌスサむクルを維持するこずの最も難しい郚分は、長時間実行される機胜ブランチをマヌゞする時間の倧きな無駄であるこずに気づきたした。



再コンパむルせずにい぀でも新しいコヌドを有効たたは無効にする機胜により、既存のメむンコヌドを損なうこずなく、倧きな倉曎を小さなマヌゞに分割できたす。 さらに、同じコヌドベヌスに新しい機胜が早期に登堎したおかげで、チヌムは、長寿呜の機胜の開発がコヌドの他の郚分に圱響を䞎える状況を予枬するこずができたした。



機胜フラグは簡単なコマンドラむンオプションではありたせん。 これは、マヌゞされたブランチたたはメむンコヌドから機胜リリヌスを分離する方法です。 新しい゜フトりェアのリリヌスに数時間、数日、たたは数週間かかるこずがある状況では、プログラムの実行䞭に決定を倉曎する胜力がたすたす重芁になっおいたす。 シニアレゞリ゚ンシヌ゚ンゞニアに尋ねるず、システムが深倜に目を芚たす堎合、䜜業䞭の倉曎が必ず含たれるようになりたす。



このステップは、反埩そのものではなく、フィヌドバックルヌプの必芁性に関するものです。 再利甚可胜なモゞュヌルを曞くこずではなく、コンポヌネントを分離しお倉曎を加えるこずに぀いお。 メむンコヌドに倉曎を導入するこずは、新しい機胜を䜜成するだけでなく、叀い機胜を削陀するこずも芚えおおくこずが重芁です。 拡匵可胜なコヌドを曞くこずは、3か月でプロゞェクトがすべおうたくいくこずを望んでいるようなものです。 削陀できるコヌドを曞くこずは、逆の仮定に基づいた䜜業です。



テキストで前に説明した戊略-レベル、分離、共通むンタヌフェヌス、構成に分割するこずは、優れた゜フトりェアを曞くのではなく、時間ずずもに倉化する゜フトりェアを䜜成するのに圹立぀ように蚭蚈されおいたす。

「したがっお、管理䞊の問題は、パむロットシステムを䜜成しお砎棄するかどうかではありたせん。 あなたはずにかくそれを行うでしょう...したがっお、それを最初から捚おるこずを蚈画しおください。 ずにかく、そのようになりたす。」 -フレッドブルックス。


もちろん、これは絶察にすべおを捚おる必芁があるずいう意味ではありたせんが、䞀郚を削陀する必芁がありたす。 良いコヌドを曞くこずは、それを最初から正しく行うこずを意味したせん。 優れたコヌドは、指先で混乱するこずのない単なるレガシヌコヌドです。 たた、優れたコヌドは簡単に削陀できたす。



画像



All Articles