プログラミングで解決すべき問題には頻出するフローや構造が少なからずあり、そういった問題の解決方法は再利用しやすいです。そのような頻出する解決方法をプログラミングの設計に落とし込んだものがデザインパターンです。デザインパターンは古くから様々なところで紹介されています。昨今では言語組み込みの機能や、フレームワークが提供する機能によってデザインパターンに挙げられていたものを使用するまでもないことが少なくないですが、相変わらず使いどころのあるパターンも全然あります。DesignPatternsPHP/DesignPatternsPHP ではその様なデザインパターンの説明とサンプルコードが多数あります。
DesignPatternsPHP/DesignPatternsPHP: sample code for several design patterns in PHP 8
このリポジトリ内のデザインパターンは次の様にサンプルコードと説明が置かれています
* // デザインパターン名 ├── README.rst // 説明の書かれたドキュメント ├── *.php // デザインパターンを実装した小さなコード群 ├── Tests │ └── *Test.php // デザインパターンを用いたコードを実際に使ったテスト └── uml └── uml.png // デザインパターンを実装したコードの関係を表現したUML
例えば Composite パターンは次の様になっています。
Composite ├── README.rst ├── Form.php ├── InputElement.php ├── Renderable.php ├── TextElement.php ├── Tests │ └── CompositeTest.php └── uml └── uml.png
読み方としては README、Test、細部がおすすめです。何のためにどの様に使ってどの様に作られているのか、がわかります。README は次のリンク先で web ページとして公開されています。
デザインパターンPHP — DesignPatternsPHP 1.0 ドキュメント
DesignPatternsPHP/DesignPatternsPHP は無料で実際に動くサンプルコード付きで参考にできるのが一番の利点です。より詳しく事例付きでデザインパターンを勉強したい場合は Head Firstデザインパターン がおすすめです。設計原則に始まり、要件設定、要件を力づくで解決する場合に起きる問題、問題を解決するデザインパターンの紹介、要件を満たすデザインパターンの実装例と練習、と詳しく読みやすく書いてくれています。
O’Reilly Japan – Head Firstデザインパターン 第2版