mike-neckのブログ

Java or Groovy or Swift or Golang

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

§5 オブジェクト指向プログラミング

  • オブジェクト指向設計とは何でないか
    • 関数とデータの組み合わせ
    • 現実の世界をモデル化 - 何を言っているんだお前は
  • カプセル化
    • 境界線の外からはデータが見えないアレ
    • C 言語でもうまくやれる
  • 継承
    • Animal クラスに派生した Cat クラスが Animal クラスになりすますアレ
    • OO 登場以前からやってる普通のプラクティス(ただし強引なキャスティングが必要な点に置いては、 OO の方がうまく扱えるようになった)
  • ポリモーフィズム
  • 依存関係逆転
    • 上位モジュールは下位のモジュールを呼び出すため、上位のモジュールは下位のモジュールに依存している (図1)
    • インターフェースを経由すると、依存関係の向きが逆向きになる = 依存関係逆転 (図2)
    • OO が安全なポリモーフィズムを提供する仕組み
    • UI/Model/Database はそれぞれ依存関係が逆転している -> 独立デプロイ可能性 (図3)
    • 独立デプロイ可能だと、別のチームが開発できる -> 独立開発可能性
  • まとめ
図1

f:id:mike_neck:20190316002333p:plain
High が Log に依存している

図2

f:id:mike_neck:20190316002824p:plain
インターフェースを間に挟むと矢印の向きが変わる

図3

f:id:mike_neck:20190316004558p:plain
UI/Model/Database