OCP -オープンクローズド原理


オープンクローズの原則は、固体の一部であるニーモニックの頭字語は、5つの設計原則の合計バンドル.
これはしばしばクリーンコードに関連付けられます.
しかし、それは正確には何ですか、あなたにも重要ですか?

どのような状態ですか?
設定されているステートメントはかなりまっすぐです.

"Software entities should be open for extension, but closed for modification".


エンティティはたくさんあります.
  • クラス
  • モジュール
  • の機能
  • 別の方法で置きます.
    実体は、彼ら自身のソースコードを変更する必要なしで彼らのふるまいを変えるのを許しなければなりません.

    一例
    以下の例を見て、開いた閉じた原理のユースケースを考えてみましょう.
    これは非常に基本的な例であり、もちろん、この1つがうまくいっている他の例ももちろんあります.
    const allowedRoles = [DevOps, SRE];
    
    export  function isAllowedToDeployChanges(user) {
      return allowedRoles.includes(user.role);
    }
    
    コード自体は大丈夫ですが、許可されたものへのロールを追加または削除したい場合はどうなりますか?
    ❌ はい、ソースコードを変更する必要があります.
    これはオープンオープンの原則を防ぐために何をしようとしている!

    何を防ぐためにしようとすると?
    OCPは、柔軟性がないソフトウェアを書くのを防ぎます.
    ❌ あなたが単に何らかの行動を修正したいと思うたびに、あなたのソースコードを変更しなければならないならば、あなたは抽象的な論理を図書館に遠ざけることができません!
    ❌ また、あなたのユニットテストで非常に柔軟性があります.
    既存のコードを変更する必要があるので、変更を行うたびに、既存のテストを新規または追加する必要があります!
    あなたが想像できるように、これはかなり柔軟性があり、時間がかかることです.
    しかし、ユーザ(自分であっても)を有効にして、ロジックを拡張するための柔軟性を与えることで、そのようなシナリオを回避することができます.
    ✅ あなたのコードはより柔軟になり、あなたはそれを抽象化することができます.
    ✅ そして、あなたのテストは基本的な論理を主張する必要があります.

    原理の適用
    上の例のコードを修正して、開いた閉じた原理に従ってください.
    コードのその部分が拡張のために開くべきであるならば、それは展開するのを許される役割をユーザーに変更させなければなりません.
    const allowedRoles = [DevOps, SRE];
    
    export function isAllowedToDeployChanges(user) {
      return allowedRoles.includes(user.role);
    }
    
    export  function addAllowedRole(role) {
      allowedRoles.push(role);
    }
    
    export  function removeAllowedRole(role) {
      const index = allowedRoles.indexOf(role);
      if (index > -1) {
        allowedRoles.splice(index, 1);
      }
    }
    
    このように、2つの機能が追加されました.
    ✅ 既存のものに新しい役割を加えるもの.
    ✅ つは既存のものからの役割を削除する.
    すべての3つの関数は、今すぐあなたのモジュールのAPIを作る必要がありますので、誰もが簡単に行動を変更することができます!

    あなたは気にする必要がありますか?
    あなたが私に尋ねるならば、はい、あなたはそうしなければなりません!
    原則に従って、実際には長い時間の多くの時間を節約できます.
    誰が定期的に古いコードに戻って、単に既存のテストの変更を含む新しい列挙体や文字列の値を追加するのが好きですか?
    そして、誰が何か少し違う必要があるたびにGitHub上の問題を開く必要がありますので、柔軟性のライブラリを使用して好きですか?
    あなたはこれらの質問のそれぞれの“私”と答えることができる場合は、何をすべきか知っている!

    去る前に
    あなたが私のコンテンツが好きならば、私を訪ねてください、そして、おそらく、あなたはあなたが見るものが好きです!