28
LaravelMVCの先へ Laravel Meetup Tokyo Vol.7 yuuki takezawa(ytake)

LaravelとMVCの先へ

Embed Size (px)

Citation preview

Page 1: LaravelとMVCの先へ

LaravelとMVCの先へLaravel Meetup Tokyo Vol.7 yuuki takezawa(ytake)

Page 2: LaravelとMVCの先へ

profile

• ytake(GitHub), ex_takezawa(twitter)

• java, php, node.js, RDBMS, NoSQL, VoltDB

• 最近転職しました

• phpライブラリとオレオレフレームワーク作り

• 最近はPHPSpec

Page 3: LaravelとMVCの先へ

Laravelエキスパート養成読本4章担当

ご興味がある方は是非お願いします

Page 4: LaravelとMVCの先へ

Laravel Feature

Page 5: LaravelとMVCの先へ

よくあげられる特徴• 静的呼び出しなファサード (\Event::fire())による初学者にもわかりやすい記述

• ActiveRecordライクなEloquent

• Auth関連コントローラが最初から付いている

• なんか流行っている

• MVCらしい

• 重量級(Laravel3は軽量だった)

• RoRっぽい

Page 6: LaravelとMVCの先へ

いえ、違います

Page 7: LaravelとMVCの先へ

よくあげられる特徴について

• ファサードはstaticではありません

• Eloquent利用は強制ではありません

• Authコントローラはあくまでモックアプリケーションや、使うならオーバライドを

• 流行りではなく、一通り使ってから決めましょう

• MVCで実装するかどうかはユーザー次第です

• RoRっぽく見えるのは外見だけです

Page 8: LaravelとMVCの先へ

Eloquent問題

• イーガーローディングを使おうと、発行されるのはIN句

• 外部キーや正規化されたデータベースには無力

• Eloquentに拘ることで自ら生み出すボトルネック

• queryBuilderで解決させる

• それ、SQL直接書いた方が早い(Basic)

• テストしてますか?

Page 9: LaravelとMVCの先へ

ファサードにみる問題

• どこにでも利用できるため、どこにでも書いてしまう

• テストしてますか?

• テストしてますか?

• テストしてますか?

Page 10: LaravelとMVCの先へ

テスト問題

• callや5.1で追加されたvisit()->seeInXXXなどは機能テスト(ファンクショナルテスト)

• クラス単位でユニットテストしてますか?

• PHPUnit本家のマニュアルは読みましょう

Page 11: LaravelとMVCの先へ

MVCじゃないの?

• 一部の機能では「設定より規約」を取り入れてますが、あくまで手段の一つ

• MVCとはアプリケーションの実装パターンの一つで、フォルダのやクラスの名前を指すものではありません

• モデルとは何か

Page 12: LaravelとMVCの先へ

どう使っていけば良いのか

Page 13: LaravelとMVCの先へ

学び方として

• フレームワークの機能を一通り使いましょう

• Illuminateコンポーネントのソースを読みましょう

• Applicationクラスを読んでみましょう

• サービスプロバイダの仕組みが理解できます

• ファサードと実クラスの関連性が理解できます

• Dependency Injectionへの理解

Page 14: LaravelとMVCの先へ

フレームワークは コンポーネントの集まり

Page 15: LaravelとMVCの先へ

アプリケーション 作りのフレームとしての

フレームワーク

Page 16: LaravelとMVCの先へ

こう作りなさい、という 規約のフレームワーク ではありません

Page 17: LaravelとMVCの先へ

PHPの流れとして

• コンポーネント志向

• 疎結合などによる拡張性や、設計

• デザインパターンの応用

• 実装もコンポジット化

• DDDへのアプローチ

Page 18: LaravelとMVCの先へ

フレームワークの使い方さえ知っていればよかった 時代ではないのです

Page 19: LaravelとMVCの先へ

Laravelで利用するには?

• コンテナを使いこなす

• ファサードを使わない選択

• リポジトリパターンから始めてみましょう

• レイヤを意識

Page 20: LaravelとMVCの先へ

コントローラ

モデル

ビュー

通常実装のイメージ

User::find(1)

return view()

コントローラで ファサード・Eloquentを利用すると密結合

Page 21: LaravelとMVCの先へ

コントローラ

データベースアクセス

リポジトリ導入イメージ

リポジトリリポジトリI/F

インターフェースを介することで データベース依存やその他のものから分離

Page 22: LaravelとMVCの先へ

リポジトリは データベース専用の 抽象レイヤではありませんので、 何かを操作するもの、 全てに対して有用です

Page 23: LaravelとMVCの先へ

コントローラ

サービス導入イメージ

それぞれのクラスが独立

サービス

リポジトリI/F

リポジトリI/F

リポジトリI/FArtisan

Page 24: LaravelとMVCの先へ

リポジトリパターンの姿

Page 25: LaravelとMVCの先へ

レイヤ

• ユーザインタフェース層

• アプリケーション層

• ドメイン層

• インフラ層

View

Controller

Model

下層のレイヤは上層を知りません

Page 26: LaravelとMVCの先へ

ファサードの実態を知ることで、 このレイヤを強く意識することができます

Page 27: LaravelとMVCの先へ

フレームワークに のった手法ではなく、 フレームワークを ツールとして

Page 28: LaravelとMVCの先へ

Laravelを使って、 フレームワークにとらわれない MVCのその先へ