Laravelのアーキテクチャを探す旅
はじめに
登壇した際に発表した資料はこちらです。
Laravelで使われているアーキテクチャを学ぶ事は今後Laravelを活用するエンジニアとしても、PHPを書くエンジニアとしてもアプリケーション開発において良い知見になる事は間違いないので是非この機会に学んでみて下さい。
アーキテクチャを学ぶ順番
code:md
依存性の注入( Dependency Injection)
↓
一般的なDIコンテナ
↓
Laravelにおけるサービスコンテナについて
↓
ファサードが呼ばれる仕組み
という順番が一番納得します。
依存性の注入( Dependency Injection)について
ただしくは、「必用なオブジェクトを注入する」とぐらいで解釈した方がいい。
実際にコードを書いてみる。
これが一番しっくりくる説明だった
番外編
サービスコンテナ(DIコンテナ)について
DIコンテナとはDI(依存性の注入)とインスタンスの生成を管理する事でインスタンス生成時の手間をへらして簡単に依存関係を解決させるツールです。
ファサードについて
ファサードは クラスメソッド の形式でサービス(クラス)を手軽るに利用できる機能です。裏側の仕組みでがサービスコンテナ経由でインスタンスメソッドを呼び出せる為、どこからでも呼び出す事が特徴です。使いすぎるとファサード警察に怒られます ファサードクラスの利用により、コードの記述がシンプルになります(ここは意見が分かれるところですが)。また、ファサードクラスでのメソッド呼び出しでは、自身では処理を行わずに、IoCコンテナに格納されたインスタンスなどに委譲します。つまり、ファサードクラスが呼び出すインスタンスを差し替えることで実際に処理を行うクラスを変えることができます。
code:md
ではRoute::get()を例にして、ファサードクラスがどのように実行されるか見て行きましょう。
1) ファサードクラスの解決
2) ファサードクラスのクラスメソッド実行
3) IoCコンテナからインスタンス取得
4) インスタンスメソッドの実行
ファサード !== ファサードパターン
https://gyazo.com/48e11177d3aa89671691e50f3e8fce60
ファサードは クラスメソッド の形式でサービス(クラス)を手軽るに利用できる機能です。
これを見ると例えば Requestファサードの実体ファイルは Illuminate\Support\Facades\Request::class であることがわかります。
getFacadeAccessor() メソッドを実装し、ここでサービスコンテナにバインドしてあるキー名(request)を返しています
このことからファサードとはサービスコンテナで管理されているクラスにアクセスできるクラスであると言えます。
サービスプロバイダとは?
まとめ的な資料
そのほか