敗者のための後方互換性

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



本当の見通し



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



推論の欠陥



下位互換性の問題は、リリースごとに大量のジャンクが追加されることです。 時間が経つにつれて、これによりプロジェクトの開発が停止し、新しいアイデアを実装するときにクリーンなコードを維持することがより困難になります。 これにより、石器時代のプロジェクトを保持するアンカーが作成されます。

これは、技術的負債の増大の問題です。 考えてみてください。 プロジェクトの最初のバージョンでAPIの設計を間違えた場合、この間違いは多くのバージョンを悩ませます。 あなたはただこの借金を取り、それを完済することはできません。 そして、これは真空中の球状の馬ではありません*。 PHPの文字列と配列の関数を見てください。 それらのパラメーターがこの順序で示されているのはなぜですか? それらを変更すると、下位互換性がもたらされるためです!



先見性



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

それが新しいコンセプトを紹介したい理由です。 なぜ、下位互換性を気にするのではなく、上位互換性を提供するのか。



翻訳の互換性



コンセプトの基本:

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


これは高貴な目標です...不適切ですか?

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



動作中



私はこのイデオロギーを一年中守ります。 パスワード用のAPIを開発したとき、このアプローチが使用されました。 それが、 $cost



$salt



代わりに$cost



$options



パラメータがある理由です。 私は将来の変更を予測し、このためにAPIを適合させようとしました。 うまくできましたか? 将来この質問に答えることができます。 しかし、下位互換性のイデオロギーに従った場合よりもはるかに良くなったと思います(それに応じて、自分がやりたいことは何でもできると思います)。

 function password_hash($password, $algo, array $options = array())
      
      







TL / DR



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

未来は私たちが影響を与えることができるものです。 間違いはすでに行われています。過去にあります。 それらを永遠に引きずらないでください...



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



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



All Articles