LoginSignup
1
0

More than 5 years have passed since last update.

[WIP]PhperKaigi GMOペパボ endu さん [フレームワークを作りながらLaravelのアーキテクチャを学ぶ]

Posted at

タイトル

フレームワークを作りながらLaravelのアーキテクチャを学ぶ

GMOペパボ endu さん

なぜフレームワークを作るのか

フレームワークの動きを学びたかった。

Phper人生

手段は本質よりも早く廃れる。
→ だから根っこの部分を知りたかった。
→ それが本質に当たる、ララベルのアーキテクチャがなぜそのアーキテクチャを採用したのかといったことを知りたかった。

Soku Framework

ClassLoaderがなぜあるのか?
composer.loaderを自作したみたいなもん。

基本に忠実なMVCを作っている。
→ 名前解決が重要だと実感できる。
→ オレオレFWの簡単なテストを書くと良さげ!(これ研修にいかせそうだな)

Laravelとオレオレフレームワークを比較

DI

「依存性の注入」
言葉わかりにくくね?

「コンストラクタインジェクション」
ServeiceINterfaceクラスを作成し、そこからコンストラクタインジェクションを行う。

結論

必要なオブジェクトを外部から注入する

DIコンテナ

注入する内容が多くなると面倒。醜い。
インスタンスのDIコンテナをやると、使うときに、インスタンスの生成を1行か2行に短縮できる。
事前にオブジェクトの生成をやる。

サービスコンテナ

Laravelが提供しているのが、サービスコンテナ

bind → インスタンスの生成方法を登録する。
resolve → サービスコンテナにおいてインスタンスを取得する

ファサード

  • ファサードクラス(config)の解決
  • ファサードクラスのクラスメソッド実行
  • サービスコンテナからインスタンスを取得
  • インスタンスメソッドの実行

本題: Laravel

アーキテクチャあんまり変わってなくね?
→ 違うんですよ。

アーキテクチャの各機能が密結合だったんだが、
ファサードを使うと、全て単体になり、ファサードを使ってそれぞれの依存関係を疎にしてくれている。

ファサード本当にいいのか?

便利ではあるが、依存関係が隠蔽されるので、使うすぎるとわかりづらくなってしまう。
クラス中心の責任が不明瞭になってしまう。

質問

何を伝えたかったのか

ファサードってどこからも呼べるので、目的に沿って必要な時のみ適切に使いましょうということ!

DIコンテナのライブラリとかティンプル以外にもサンプルにしたものあるのか?

ティンプルしか使っていない。
そのあとにLaravelのものと見比べた。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0