Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
LaravelとMVCの先へ
Laravel Meetup Tokyo Vol.7
yuuki takezawa(ytake)
profile
• ytake(GitHub), ex_takezawa(twitter)
• java, php, node.js, RDBMS, NoSQL, VoltDB
• 最近転職しました
• phpライブラリとオレオレフレームワーク作...
Laravelエキスパート養成読本4章担当
ご興味がある方は是非お願いします
Laravel Feature
よくあげられる特徴
• 静的呼び出しなファサード (Event::fire())

による初学者にもわかりやすい記述
• ActiveRecordライクなEloquent
• Auth関連コントローラが最初から付いている
• なんか流行っている
...
いえ、違います
よくあげられる特徴について
• ファサードはstaticではありません
• Eloquent利用は強制ではありません
• Authコントローラはあくまでモックアプリケーションや、

使うならオーバライドを
• 流行りではなく、一通り使ってから決...
Eloquent問題
• イーガーローディングを使おうと、発行されるのはIN句
• 外部キーや正規化されたデータベースには無力
• Eloquentに拘ることで自ら生み出すボトルネック
• queryBuilderで解決させる
• それ、SQL...
ファサードにみる問題
• どこにでも利用できるため、どこにでも書い
てしまう
• テストしてますか?
• テストしてますか?
• テストしてますか?
テスト問題
• callや5.1で追加されたvisit()->seeInXXXなど
は機能テスト(ファンクショナルテスト)
• クラス単位でユニットテストしてますか?
• PHPUnit本家のマニュアルは読みましょう
MVCじゃないの?
• 一部の機能では「設定より規約」を取り入れてますが、


あくまで手段の一つ
• MVCとはアプリケーションの実装パターンの一つ
で、

フォルダのやクラスの名前を指すものではありません
• モデルとは何か
どう使っていけば良いのか
学び方として
• フレームワークの機能を一通り使いましょう
• Illuminateコンポーネントのソースを読みましょう
• Applicationクラスを読んでみましょう
• サービスプロバイダの仕組みが理解できます
• ファサードと実クラス...
フレームワークは
コンポーネントの集まり
アプリケーション
作りのフレームとしての
フレームワーク
こう作りなさい、という
規約のフレームワーク
ではありません
PHPの流れとして
• コンポーネント志向
• 疎結合などによる拡張性や、設計
• デザインパターンの応用
• 実装もコンポジット化
• DDDへのアプローチ
フレームワークの使い方さえ
知っていればよかった
時代ではないのです
Laravelで利用するには?
• コンテナを使いこなす
• ファサードを使わない選択
• リポジトリパターンから始めてみましょう
• レイヤを意識
コントローラ
モデル
ビュー
通常実装のイメージ
User::find(1)
return view()
コントローラで
ファサード・Eloquentを利用すると密結合
コントローラ
データベースアクセス
リポジトリ導入イメージ
リポジトリリポジトリI/F
インターフェースを介することで
データベース依存やその他のものから分離
リポジトリは
データベース専用の
抽象レイヤではありませんので、
何かを操作するもの、
全てに対して有用です
コントローラ
サービス導入イメージ
それぞれのクラスが独立
サービス
リポジトリI/F
リポジトリI/F
リポジトリI/FArtisan
リポジトリパターンの姿
レイヤ
• ユーザインタフェース層
• アプリケーション層
• ドメイン層
• インフラ層
View
Controller
Model
下層のレイヤは上層を知りません
ファサードの実態を知ることで、
このレイヤを強く意識することが
できます
フレームワークに
のった手法ではなく、
フレームワークを
ツールとして
Laravelを使って、
フレームワークにとらわれない
MVCのその先へ
Upcoming SlideShare
Loading in …5
×

LaravelとMVCの先へ

6,747 views

Published on

Laravel Meetup Tokyo Vol.7

Published in: Technology
  • Be the first to comment

LaravelとMVCの先へ

  1. 1. LaravelとMVCの先へ Laravel Meetup Tokyo Vol.7 yuuki takezawa(ytake)
  2. 2. profile • ytake(GitHub), ex_takezawa(twitter) • java, php, node.js, RDBMS, NoSQL, VoltDB • 最近転職しました • phpライブラリとオレオレフレームワーク作り • 最近はPHPSpec
  3. 3. Laravelエキスパート養成読本4章担当 ご興味がある方は是非お願いします
  4. 4. Laravel Feature
  5. 5. よくあげられる特徴 • 静的呼び出しなファサード (Event::fire())
 による初学者にもわかりやすい記述 • ActiveRecordライクなEloquent • Auth関連コントローラが最初から付いている • なんか流行っている • MVCらしい • 重量級(Laravel3は軽量だった) • RoRっぽい
  6. 6. いえ、違います
  7. 7. よくあげられる特徴について • ファサードはstaticではありません • Eloquent利用は強制ではありません • Authコントローラはあくまでモックアプリケーションや、
 使うならオーバライドを • 流行りではなく、一通り使ってから決めましょう • MVCで実装するかどうかはユーザー次第です • RoRっぽく見えるのは外見だけです
  8. 8. Eloquent問題 • イーガーローディングを使おうと、発行されるのはIN句 • 外部キーや正規化されたデータベースには無力 • Eloquentに拘ることで自ら生み出すボトルネック • queryBuilderで解決させる • それ、SQL直接書いた方が早い(Basic) • テストしてますか?
  9. 9. ファサードにみる問題 • どこにでも利用できるため、どこにでも書い てしまう • テストしてますか? • テストしてますか? • テストしてますか?
  10. 10. テスト問題 • callや5.1で追加されたvisit()->seeInXXXなど は機能テスト(ファンクショナルテスト) • クラス単位でユニットテストしてますか? • PHPUnit本家のマニュアルは読みましょう
  11. 11. MVCじゃないの? • 一部の機能では「設定より規約」を取り入れてますが、 
 あくまで手段の一つ • MVCとはアプリケーションの実装パターンの一つ で、
 フォルダのやクラスの名前を指すものではありません • モデルとは何か
  12. 12. どう使っていけば良いのか
  13. 13. 学び方として • フレームワークの機能を一通り使いましょう • Illuminateコンポーネントのソースを読みましょう • Applicationクラスを読んでみましょう • サービスプロバイダの仕組みが理解できます • ファサードと実クラスの関連性が理解できます • Dependency Injectionへの理解
  14. 14. フレームワークは コンポーネントの集まり
  15. 15. アプリケーション 作りのフレームとしての フレームワーク
  16. 16. こう作りなさい、という 規約のフレームワーク ではありません
  17. 17. PHPの流れとして • コンポーネント志向 • 疎結合などによる拡張性や、設計 • デザインパターンの応用 • 実装もコンポジット化 • DDDへのアプローチ
  18. 18. フレームワークの使い方さえ 知っていればよかった 時代ではないのです
  19. 19. Laravelで利用するには? • コンテナを使いこなす • ファサードを使わない選択 • リポジトリパターンから始めてみましょう • レイヤを意識
  20. 20. コントローラ モデル ビュー 通常実装のイメージ User::find(1) return view() コントローラで ファサード・Eloquentを利用すると密結合
  21. 21. コントローラ データベースアクセス リポジトリ導入イメージ リポジトリリポジトリI/F インターフェースを介することで データベース依存やその他のものから分離
  22. 22. リポジトリは データベース専用の 抽象レイヤではありませんので、 何かを操作するもの、 全てに対して有用です
  23. 23. コントローラ サービス導入イメージ それぞれのクラスが独立 サービス リポジトリI/F リポジトリI/F リポジトリI/FArtisan
  24. 24. リポジトリパターンの姿
  25. 25. レイヤ • ユーザインタフェース層 • アプリケーション層 • ドメイン層 • インフラ層 View Controller Model 下層のレイヤは上層を知りません
  26. 26. ファサードの実態を知ることで、 このレイヤを強く意識することが できます
  27. 27. フレームワークに のった手法ではなく、 フレームワークを ツールとして
  28. 28. Laravelを使って、 フレームワークにとらわれない MVCのその先へ

×