Laravelのアーキテクチャを探す旅
はじめに
この記事はPHPerKaigi 2019で発表するフレームワークを作りながらLaravelのアーキテクチャを学ぶの資料作成の為に参考にした記事や資料をまとめています。
登壇した際に発表した資料はこちらです。
フレームワークを作りながらLaravelのアーキテクチャを学ぶ
Laravelで使われているアーキテクチャを学ぶ事は今後Laravelを活用するエンジニアとしても、PHPを書くエンジニアとしてもアプリケーション開発において良い知見になる事は間違いないので是非この機会に学んでみて下さい。
アーキテクチャを学ぶ順番
code:md
依存性の注入( Dependency Injection)
↓
一般的なDIコンテナ
↓
Laravelにおけるサービスコンテナについて
↓
ファサードが呼ばれる仕組み
という順番が一番納得します。
依存性の注入( Dependency Injection)について
ただしくは、「必用なオブジェクトを注入する」とぐらいで解釈した方がいい。
DIとDIコンテナをサンプルコードを書いて理解する
実際にコードを書いてみる。
やはりあなた方のDependency Injectionはまちがっている。
これが一番しっくりくる説明だった
依存性注入とLaravelのIoCクラス
dependency-injection-for-beginners
翻訳途中:【翻訳】Dependency Injection 入門
What is Dependency Injection? Articles \- Fabien Potencier
翻訳した:【翻訳】Dependency Injectionとは何でしょうか?
Inversion of Control Containers and the Dependency Injection pattern
今日から始める依存性の注入 / First Time Dependency Injection
番外編
依存関係逆転の原則の重要性について – Eureka Engineering – Medium
サービスコンテナ(DIコンテナ)について
DIコンテナとはDI(依存性の注入)とインスタンスの生成を管理する事でインスタンス生成時の手間をへらして簡単に依存関係を解決させるツールです。
サービスコンテナについてサンプルコードを書いて学ぶ
Laravel's Dependency Injection Container in Depth
Do you need a Dependency Injection Container?
サービスコンテナについて
ファサードについて
ファサードは クラスメソッド の形式でサービス(クラス)を手軽るに利用できる機能です。裏側の仕組みでがサービスコンテナ経由でインスタンスメソッドを呼び出せる為、どこからでも呼び出す事が特徴です。使いすぎるとファサード警察に怒られます
Response: Don’t Use Facades
翻訳:【翻訳】Don’t Use Facadesに対する回答
Laravel コードで見るファサードクラスの仕組み \- Shin x blog
ファサードクラスの利用により、コードの記述がシンプルになります(ここは意見が分かれるところですが)。また、ファサードクラスでのメソッド呼び出しでは、自身では処理を行わずに、IoCコンテナに格納されたインスタンスなどに委譲します。つまり、ファサードクラスが呼び出すインスタンスを差し替えることで実際に処理を行うクラスを変えることができます。
code:md
ではRoute::get()を例にして、ファサードクラスがどのように実行されるか見て行きましょう。
1) ファサードクラスの解決
2) ファサードクラスのクラスメソッド実行
3) IoCコンテナからインスタンス取得
4) インスタンスメソッドの実行
自分流 Laravel 4 アプリケーションアーキテクチャ - Shin x blog
ファサード !== ファサードパターン
https://gyazo.com/48e11177d3aa89671691e50f3e8fce60
ファサードについて - Laravel学習帳
ファサードは クラスメソッド の形式でサービス(クラス)を手軽るに利用できる機能です。
これを見ると例えば Requestファサードの実体ファイルは Illuminate\Support\Facades\Request::class であることがわかります。
getFacadeAccessor() メソッドを実装し、ここでサービスコンテナにバインドしてあるキー名(request)を返しています
このことからファサードとはサービスコンテナで管理されているクラスにアクセスできるクラスであると言えます。
サービスプロバイダとは?
まとめ的な資料
LaravelとMVCの先へ
Laravel5のアーキテクチャから学ぶより良いクラス設計
そのほか
Laravelソースコードの歩き方
laravel/laravel: A PHP framework for web artisans
taylorさんが書いた記事
#Laravelのアーキテクチャを探す旅 #Laravel