実践、Interface
https://speakerdeck.com/togishima/shi-jian-interface
https://fortee.jp/phpcon-kansai2024/proposal/a71a2778-826d-480c-bb0f-153df97f3448
https://sizu.me/ogi/posts/wsv66xtz9zhw
素朴な実装、テンプレート直書き(slide=12)
Viewにロジックが漏れている
具象への依存、Postモデルに分岐で実装(slide=16)
変更の波及箇所が多い(IMO:Open Closedでなさそう)
抽象への依存、HasLoginWall interface(slide=19)
getLoginWallメソッドを持たせる
具体のUserに実装させる
使う側のコードが短く
interfaceの効能の1つは、依存の向きが逆転したこと(slide=27)
PostはUserを知っていなくてよい(依存しない)
PostはHasLoginWallに依存
(このinterfaceを実装したモノが来る。詳細は知らなくてよい)
具体のUserはHasLoginWallを実装
さらに効能2つ(slide=27)
抽象という安定に依存
拡張性
1人で開発するためのアーキテクチャ 5人で開発するためのアーキテクチャ 30人で開発するためのアーキテクチャ 100人で開発するためのアーキテクチャ ってそれぞれ全然違うよな。
オススメ
モデルとはなにか
擬人化で完全に理解するクリーンアーキテクチャ
OOC 2024、ふわせぐさん
『具体と抽象』
『Design It!!』
『ちょうぜつソフトウェア設計入門』
『現場で役立つシステム設計の原則』
『良いコード/悪いコードで学ぶ設計入門』