敗者のための後方互換性

あなたはそれを正しく読みます。 プロジェクトの目標が下位互換性を維持することである場合、あなたは失敗です。 PHPからMicrosoft Windowsへの人気のあるプロジェクトの多くは、バージョン間の下位互換性を主張しています。 そして、はい、これは正しくないことを言いたいです。

本当の見通し


まあ、私は下位互換性のサポートが悪いターゲットだと言っているつもりはありません。 多くの場合、これにより誰にとっても簡単になります。 うーん、多分いつもではない。 短期的には、下位互換性は大したことではありませんが、誰もがその恩恵を受けます。 各変更は小さく、比較する対象が少ないため、メンターにとっては簡単です。 更新の苦痛が少ないため、ユーザーにとっては簡単です。

推論の欠陥


下位互換性の問題は、リリースごとに大量のジャンクが追加されることです。 時間が経つにつれて、これによりプロジェクトの開発が停止し、新しいアイデアを実装するときにクリーンなコードを維持することがより困難になります。 これにより、石器時代のプロジェクトを保持するアンカーが作成されます。
これは、技術的負債の増大の問題です。 考えてみてください。 プロジェクトの最初のバージョンでAPIの設計を間違えた場合、この間違いは多くのバージョンを悩ませます。 あなたはただこの借金を取り、それを完済することはできません。 そして、これは真空中の球状の馬ではありません*。 PHPの文字列と配列の関数を見てください。 それらのパラメーターがこの順序で示されているのはなぜですか? それらを変更すると、下位互換性がもたらされるためです!

先見性


後方互換性の主な問題はイデオロギーです-書かれたものはすべて最初は正しいと考えられています。 すべてが最初から完璧であれば、互換性のサポートは簡単です。 理論的に。 しかし、実際にはそうではありません。 他のことと同じように、私たちは初めてすべてを正しく行うことはありません。
それが新しいコンセプトを紹介したい理由です。 なぜ、下位互換性を気にするのではなく、上位互換性を提供するのか。

翻訳の互換性


コンセプトの基本:
現在作成しているコードの将来のニーズを予測し、後で下位互換性を心配しないように十分に柔軟に書きます。

これは高貴な目標です...不適切ですか?
まあ、そうでもない。 完全に機能するためにコードは必要ありません-そのタスクを実行するために必要です。 より良い間違いをして最初は間違ったことをしますが、将来このコードが必要なすべてのタスクを解決し、将来のニーズを満たすことを最初に想像するよりも簡単です。

動作中


私はこのイデオロギーを一年中守ります。 パスワード用のAPIを開発したとき、このアプローチが使用されました。 それが、 $cost$salt代わりに$cost $optionsパラメータがある理由です。 私は将来の変更を予測し、このためにAPIを適合させようとしました。 うまくできましたか? 将来この質問に答えることができます。 しかし、下位互換性のイデオロギーに従った場合よりもはるかに良くなったと思います(それに応じて、自分がやりたいことは何でもできると思います)。
 function password_hash($password, $algo, array $options = array()) 


TL / DR


次回、変更を提案し、下位互換性を検討するのではなく、将来のニーズに合わせてこれをどのように実装できるかを考えます。 下位互換性の障害を防ぐ最善の方法は、それらを最初に計画することです。 私は後方互換性を無視すると言っているわけではありませんが、未来に焦点を合わせ、過去を適切な場所に置く方が良いです。
未来は私たちが影響を与えることができるものです。 間違いはすでに行われています。過去にあります。 それらを永遠に引きずらないでください...

*オリジナル:そして、これは理論的な問題すらありません

この翻訳には明らかに多くの欠陥が含まれています。私は言語を学んでいるだけです。PMのエラーを指摘してくれてありがとう、ありがとう。

Source: https://habr.com/ru/post/J185164/


All Articles