mike-neckのブログ

Java or Groovy or Swift or Golang

クリーンアーキテクチャーの読書メモ(8)

§9 LSP: リスコフの置換原則

  • 1988年 Barbara Liskov
    • S 型のオブジェクト o1 の各々に、対応する T 型のオブジェクト o2 が 1 つ存在し、 T を使って定義されたプログラム P に対して o2 の代わりに o1 を使っても P の振る舞いが変わらない場合、 S は T の派生型である(『アジャイルソフトウェア開発の奥義』)
  • 正方形・長方形問題
    • リスコフの置換原則を満たしていない
  • リスコフの置換原則は敬称の使い方の指針と考えられていたが、インターフェースと実装に関するソフトウェア設計の原則になっている
  • アーキテクチャーがリスコフの置換原則を満たさない例
    • 業界統一の API パスパターン
    • 一部の企業が API を満たさないように設計する
    • API を呼び出す側はその一部の企業のために if 文をモジュールに追加して呼び出しを調整する(複雑になる)
    • 一部の企業が業界の他の企業を買収する
      • 他の企業の API もあわせることに…
    • API 呼び出し側の複雑性が高くなる

f:id:mike_neck:20190322033333p:plain
リスコフの置換原則を満たしている例

f:id:mike_neck:20190322033634p:plain
正方形・長方形問題