2013.05.24Takashi OhidaLARAVEL4HAPPY HACKING13年5月29日水曜日
目次自己紹介PHP / フレームワーク歴Laravel4でつくってみたLaravel4のすごいところ紹介13年5月29日水曜日
自己紹介13年5月29日水曜日
自己紹介名前:大日田 貴司(オオヒダ タカシ)所属:都内ウェブ系企業職業:開発、企画コード書いてません(^_^;)サービス設計とかUI/UXとか13年5月29日水曜日
PHP歴PHP歴 8年くらいPython / RubyとかなんとなくわかるGAE / Railsとか少し触ったことある色々あるけどPHPはかわいい13年5月29日水曜日
フレームワーク歴僕がPHPをはじめた頃外の会社からできるプログラマが手伝いに来て言った「まずフレームワークをつくりましょう」13年5月29日水曜日
フレームワーク歴「フレームワーク?なにそれ?おいしいの?」13年5月29日水曜日
フレームワーク歴当時はまだRailsなど存在せずPHP界隈には、JavaのStrutsに影響をうけたフレームワークが出てきた頃かもという時代13年5月29日水曜日
フレームワーク歴フレームワークとは何かがんばって調べたMVC、アーキテクチャ設計、デザインパターン、etc ...13年5月29日水曜日
フレームワーク歴概念のすべてを理解しきれなかったけど「フレームワークってなんだかかっこいい!」13年5月29日水曜日
フレームワーク歴二人でフレームワークをつくった今思えばとても原始的なものだったけどフレームワークをつくるのはすごく楽しかったし、勉強になった13年5月29日水曜日
フレームワーク歴そんなこんなでフレームワークに関心を持つようになった13年5月29日水曜日
フレームワーク歴Railsが出た頃さわってみて、超すごい!と興奮したPHPでいいのないのかなかったつくったRailsのソースを読んでPHPでそれっぽく実装13年5月29日水曜日
フレームワーク歴自作フレームワーカーだったのでCakePHPとかCodeIgniter / FuelPHPとかSymfonyとかちゃんと使ったことない自作も大変なのでイイのに乗り換えたい願望13年5月29日水曜日
フレームワーク歴PHP歴 ≒ フレームワーク歴自作フレームワーク()メジャーどころはなんとなく知ってるけどちゃんと使ったことは無いまとめ13年5月29日水曜日
LARAVEL313年5月29日水曜日
LARAVEL3去年のちょうど今頃、HackerNewsでみかけたhttps://news.ycombinator.com/item?id=402942713年5月29日水曜日
LARAVEL3シンプルでクリーンな設計思想軽量だがひと通りの機能は っている拡張性(bundles)もあるが、13年5月29日水曜日
LARAVEL3Staticメソッド多用新しいフレームワークって色々不安命名規則が好みではないfunction action_index()とか13年5月29日水曜日
LARAVEL3なんか惜しいというかそんなにビビビッとこなかった名前はかわいいのだけれど・・・13年5月29日水曜日
LARAVEL3(́・ω・`)13年5月29日水曜日
LARAVEL3そして、ときは流れ…13年5月29日水曜日
LARAVEL413年5月29日水曜日
LARAVEL4最近、ふと思ったブログでも書こうどうせなら自分でつくろう全然プログラミングしてないしリハビリもかねて13年5月29日水曜日
LARAVEL4フレームワーク何にしよう?13年5月29日水曜日
LARAVEL4軽量系のフレームワークをいくつか試したSlimSilexPhalcon(micro)FuelPHP...13年5月29日水曜日
LARAVEL4Laravel4のベータが出ていたので試した13年5月29日水曜日
LARAVEL43の思い出(使ってないけど)13年5月29日水曜日
LARAVEL44をみてみたらびっくり3でイケてなかった点が悉く「解消」していた13年5月29日水曜日
LARAVEL4もちろん良かった点はそのままに13年5月29日水曜日
LARAVEL4「ららべる子?」「顔はかわいいんだけど」「ちょっとおてんばな性格がなぁ…」13年5月29日水曜日
LARAVEL4そんなららべる子と1年ぶりに偶然再開したら13年5月29日水曜日
LARAVEL4かわいらしさはそのままにとても品のよい子に成長していた ...!13年5月29日水曜日
HAPPY HACKINGwith Laravel413年5月29日水曜日
HAPPY HACKING楽しいって何か書いてて楽しい、嬉しいラクに書ける、シンプルで書きやすいわかりやすい、悩まない思い通りに操れる13年5月29日水曜日
HAPPY HACKING楽しいって何かプログラマーズハイ・高揚感スーパーハカーな気分マジカルな感じ・支配感ゆけおれのコードよ13年5月29日水曜日
HAPPY HACKINGLaravelにあるものしっかりした枠組みプログラミングを楽しくしてくれる仕組みプログラミングのレベルを底上げしてくれるような思想13年5月29日水曜日
HAPPY HACKINGIoC Containerによるパワフルで賢い依存性解決シンプルでクリーンな設計思想・記述軽量で追いやすいコアコード実績のある基盤(symfony component)柔軟性、拡張性13年5月29日水曜日
HAPPY HACKINGStaticメソッド多用IoC Container x Facadeにより解決しました新しいフレームワークって色々不安信頼と実績のSymfony Componentが基盤になりました命名規則が好みではない好みな感じ(P...
HAPPY HACKINGもはやハッピーな感じしかしない13年5月29日水曜日
HAPPY HACKINGということでLaravel4でブログをつくってみました13年5月29日水曜日
POCHIKAポーチカ13年5月29日水曜日
POCHIKALaravel4でつくった軽量ブログエンジンデータベースは使わず、markdownファイルを変換jekyll風味(けどstatic file generatorではない)php的に動的に動作するキャッシュとかプラグインとか13年5月...
POCHIKA使ってる機能RoutingConfigControllerError & LoggingCacheEventsIoC ContainerView / Templates / BladeUnit TestingArtisan CLIま...
http://github.com/ohida/pochikaPOCHIKA13年5月29日水曜日
LARAVEL413年5月29日水曜日
LARAVEL4IoC Container / FacadeIlluminate / composer / symfony componentspsr-0(autoload) / psr-1(coding standard)その他色々パワーアッ...
LARAVEL4IoC Container... どのように依存性を解決するかFacade... シンプルで強力なインターフェイスおまけ:UnitTest... IoC ContainerとFacadeが必要な理由13年5月29日水曜日
IOC CONTAINER13年5月29日水曜日
IOC CONTAINERIoC ... Inversion of Control制御の逆転13年5月29日水曜日
IOC CONTAINER“The IoC container is at theheart of the entire applicationand all dependencies areresolved through that.”Tay...
IOC CONTAINERThe Laravel inversion of control container is a powerful tool for managing classdependencies. Dependency inje...
IOC CONTAINERBasic Usage13年5月29日水曜日
IOC CONTAINER$foo = new Foo;13年5月29日水曜日
IOC CONTAINER$foo = App::make(Foo);13年5月29日水曜日
IOC CONTAINERApp::bind(foo, function() {	 return new Foo;});$foo = App::make(foo);13年5月29日水曜日
IOC CONTAINER$view = new SmartyView;"App::bind(view, function() {$smarty = new SmartyView;$smarty->..return $smarty;});$vi...
IOC CONTAINER$view = new TwigView;"App::bind(view, function() {return new TwigView([..]);});$view = App::make(view);13年5月2...
IOC CONTAINERクラスを「直接」呼ぶのではなくIoC Containerを通して「間接的」に呼び出す13年5月29日水曜日
IOC CONTAINERクラスが必要になった時IoC Containerさんがよしなにつくってくれる13年5月29日水曜日
IOC CONTAINER僕:IoCさん、僕がfeedくれっていったらAtomFeedのことですからよろしくですよIoCさん:(o e o)アイヨ∼そしてその時がきた∼僕:「feedくれ!」IoCさん:(o e o)つ アイヨ ∼【AtomFe...
IOC CONTAINER登録App::bind(feed, function() {	 return new AtomFeed;});使う$feed = App::make(feed);echo $feed->generate(); //re...
IOC CONTAINER登録App::bind(feed, function() {	 return new RssFeed;});使う$feed = App::make(feed);echo $feed->generate(); //ren...
IOC CONTAINERsingletonもIoCが解決App::singleton(foo, function(){return new FooBar;});13年5月29日水曜日
IOC CONTAINER既にあるインスタンスを登録することも$foo = new Foo;App::instance(foo, $foo);13年5月29日水曜日
IOC CONTAINERAutomatic ResolutionThe IoC container is powerful enough to resolveclasses without any configuration at all in...
IOC CONTAINERclass FooBar {public function __construct(Baz $baz){$this->baz = $baz;}}$foobar = new FooBar(new Baz);13年5月29...
IOC CONTAINERclass FooBar {public function __construct(Baz $baz){$this->baz = $baz;}}$foobar = App::make(‘FooBar’);13年5月29...
IOC CONTAINERclass FooBar {public function __construct(PiyoInterface $baz){$this->baz = $baz;}}IoCさん (o e o)Interfaceかー 解決...
IOC CONTAINERApp::bind(‘PiyoInterface’, Poyo);# PiyoInterfaceが呼ばれたらPoyoのことなんだからね13年5月29日水曜日
IOC CONTAINERclass FooBar {public function __construct(PiyoInterface $baz){$this->baz = $baz;}}App::bind(‘PiyoInterface’, ...
IOC CONTAINERclass Eva {public function __construct(PilotInterface $pilot){$this->pilot = $pilot;}}App::bind(‘PilotInterfa...
Practical Usage実用例IOC CONTAINER13年5月29日水曜日
IOC CONTAINERclass OrderController extends BaseController {public function __construct(OrderRepository $orders){$this->ord...
IOC CONTAINER$orders = new OrderRepository();new OrderController($orders);App::bind(‘OrderRepository’, ‘MockOrders’)App::m...
IOC CONTAINERIn this example, the OrderRepository class will automatically be injectedinto the controller. This means that...
IOC CONTAINERまとめIoCとは、Inversion Of Control(制御の逆転)よしなにクラスをつくってくれるよしなに依存関係を解決してくれるテストもしやすくなる13年5月29日水曜日
FACADE13年5月29日水曜日
Facade(ファサード)とは「建物の正面」を意味する。(wikipediaより)FACADE13年5月29日水曜日
FACADEなんの正面か = クラス13年5月29日水曜日
FACADEPage::find(about);13年5月29日水曜日
FACADEBehind the scene13年5月29日水曜日
FACADEclass Page {private static $pages;public static function find($name){return self::$pages[$name];}}# なるほどstaticね。Page...
FACADEPage::find(about);class Page {private $pages;public function find($name){return $this->pages[$name];}}# ちがうよ。Pageクラス...
FACADEPage::find(about);Pageクラスではなく、実はFacadeが呼ばれている13年5月29日水曜日
FACADEPage::method()って書いたら、普通はPageクラスがよばれるそして ”そのメソッドはstaticに呼べません”というエラーが出るFacadeを介すには?13年5月29日水曜日
FACADEPage::method()って書いたら、Facadeの方よんでねとLaravelに教えるapp/config/app.phpに書くaliases = [‘Page’ => ‘FacadesPage’,];13年5月29日水曜日
FACADE<?php namespace PochikaFacades;use IlluminateSupportFacadesFacade;class Page extends Facade {/*** Get the registered...
FACADEPage::find(‘about’);"Pageファサード"App::resolve(‘page’)->find(‘about’);13年5月29日水曜日
FACADE$this->input->get(‘hoge’);"Input::get(‘hoge‘);13年5月29日水曜日
FACADE$view = new View;$view->render(‘index.html’);"View::make(‘index.html’);13年5月29日水曜日
FACADEどこからでも単独で呼び出せる$thisって誰?を意識しない誰でもいいしいなくてもいい疎結合依存性、コンテキストの排除統一されたクリーンなインターフェイス$this->hogeだったりnew Fuga()だったりしない13年5月29日...
FACADEまとめFacadeを利用することで、シンプルで強力なインターフェイスでクラスを扱うことができる13年5月29日水曜日
FACADELaravel4はIoC ContainerとFacadeがキモLaravel4使うなら最初に理解するべきポイント13年5月29日水曜日
FACADERouterRouter::get(‘/’,‘IndexController@index’);EventEvent::fire(‘post.converted’);ViewView::make(‘index.html’, $paylo...
UNITTEST13年5月29日水曜日
UNITTESTテストしやすい/しにくいってなにかStaticメソッドでテストが難しいのはなぜか13年5月29日水曜日
UNITTESTUnitTestではテスト毎に初期化されることが前提前のテストの影響をうけるとまともなテストにならない13年5月29日水曜日
UNITTESTstaticオブジェクトにはconstructorとdestructorがない初期化処理と終了処理が行われない始まりと終わりがないひとつのテストによって生じた状態をクリアできない13年5月29日水曜日
UNITTESTfunction testEach(){PostRepository::each(function($post) {$post->title .= ‘:hoge’;});$this->assertHoge(..);}functi...
まとめ13年5月29日水曜日
まとめLaravel4は3のときのよさ(クリーンさとか)はそのままにIoC Containerとかcomposerで中身がおとなになったテストもしやすい(規模に関わらずテストは必要)PHPもここまで来たかくらいイケてる感じで書ける13年5月29...
LARAVEL4たのしい☆彡のでみんなつかおう(自分に合うかは見極めよう)13年5月29日水曜日
13年5月29日水曜日
http://solvalou.net/http://twitter.com/ohidahttp://www.facebook.com/takashi.ohidahttp://github.com/ohidaTakashi Ohida13年5月...
Upcoming SlideShare
Loading in …5
×

Laravel4 Happy Hacking

10,431 views
10,346 views

Published on

Laravel 勉強会 東京 #1でのプレゼン資料です

Published in: Technology
0 Comments
23 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
10,431
On SlideShare
0
From Embeds
0
Number of Embeds
20
Actions
Shares
0
Downloads
34
Comments
0
Likes
23
Embeds 0
No embeds

No notes for slide

Laravel4 Happy Hacking

  1. 1. 2013.05.24Takashi OhidaLARAVEL4HAPPY HACKING13年5月29日水曜日
  2. 2. 目次自己紹介PHP / フレームワーク歴Laravel4でつくってみたLaravel4のすごいところ紹介13年5月29日水曜日
  3. 3. 自己紹介13年5月29日水曜日
  4. 4. 自己紹介名前:大日田 貴司(オオヒダ タカシ)所属:都内ウェブ系企業職業:開発、企画コード書いてません(^_^;)サービス設計とかUI/UXとか13年5月29日水曜日
  5. 5. PHP歴PHP歴 8年くらいPython / RubyとかなんとなくわかるGAE / Railsとか少し触ったことある色々あるけどPHPはかわいい13年5月29日水曜日
  6. 6. フレームワーク歴僕がPHPをはじめた頃外の会社からできるプログラマが手伝いに来て言った「まずフレームワークをつくりましょう」13年5月29日水曜日
  7. 7. フレームワーク歴「フレームワーク?なにそれ?おいしいの?」13年5月29日水曜日
  8. 8. フレームワーク歴当時はまだRailsなど存在せずPHP界隈には、JavaのStrutsに影響をうけたフレームワークが出てきた頃かもという時代13年5月29日水曜日
  9. 9. フレームワーク歴フレームワークとは何かがんばって調べたMVC、アーキテクチャ設計、デザインパターン、etc ...13年5月29日水曜日
  10. 10. フレームワーク歴概念のすべてを理解しきれなかったけど「フレームワークってなんだかかっこいい!」13年5月29日水曜日
  11. 11. フレームワーク歴二人でフレームワークをつくった今思えばとても原始的なものだったけどフレームワークをつくるのはすごく楽しかったし、勉強になった13年5月29日水曜日
  12. 12. フレームワーク歴そんなこんなでフレームワークに関心を持つようになった13年5月29日水曜日
  13. 13. フレームワーク歴Railsが出た頃さわってみて、超すごい!と興奮したPHPでいいのないのかなかったつくったRailsのソースを読んでPHPでそれっぽく実装13年5月29日水曜日
  14. 14. フレームワーク歴自作フレームワーカーだったのでCakePHPとかCodeIgniter / FuelPHPとかSymfonyとかちゃんと使ったことない自作も大変なのでイイのに乗り換えたい願望13年5月29日水曜日
  15. 15. フレームワーク歴PHP歴 ≒ フレームワーク歴自作フレームワーク()メジャーどころはなんとなく知ってるけどちゃんと使ったことは無いまとめ13年5月29日水曜日
  16. 16. LARAVEL313年5月29日水曜日
  17. 17. LARAVEL3去年のちょうど今頃、HackerNewsでみかけたhttps://news.ycombinator.com/item?id=402942713年5月29日水曜日
  18. 18. LARAVEL3シンプルでクリーンな設計思想軽量だがひと通りの機能は っている拡張性(bundles)もあるが、13年5月29日水曜日
  19. 19. LARAVEL3Staticメソッド多用新しいフレームワークって色々不安命名規則が好みではないfunction action_index()とか13年5月29日水曜日
  20. 20. LARAVEL3なんか惜しいというかそんなにビビビッとこなかった名前はかわいいのだけれど・・・13年5月29日水曜日
  21. 21. LARAVEL3(́・ω・`)13年5月29日水曜日
  22. 22. LARAVEL3そして、ときは流れ…13年5月29日水曜日
  23. 23. LARAVEL413年5月29日水曜日
  24. 24. LARAVEL4最近、ふと思ったブログでも書こうどうせなら自分でつくろう全然プログラミングしてないしリハビリもかねて13年5月29日水曜日
  25. 25. LARAVEL4フレームワーク何にしよう?13年5月29日水曜日
  26. 26. LARAVEL4軽量系のフレームワークをいくつか試したSlimSilexPhalcon(micro)FuelPHP...13年5月29日水曜日
  27. 27. LARAVEL4Laravel4のベータが出ていたので試した13年5月29日水曜日
  28. 28. LARAVEL43の思い出(使ってないけど)13年5月29日水曜日
  29. 29. LARAVEL44をみてみたらびっくり3でイケてなかった点が悉く「解消」していた13年5月29日水曜日
  30. 30. LARAVEL4もちろん良かった点はそのままに13年5月29日水曜日
  31. 31. LARAVEL4「ららべる子?」「顔はかわいいんだけど」「ちょっとおてんばな性格がなぁ…」13年5月29日水曜日
  32. 32. LARAVEL4そんなららべる子と1年ぶりに偶然再開したら13年5月29日水曜日
  33. 33. LARAVEL4かわいらしさはそのままにとても品のよい子に成長していた ...!13年5月29日水曜日
  34. 34. HAPPY HACKINGwith Laravel413年5月29日水曜日
  35. 35. HAPPY HACKING楽しいって何か書いてて楽しい、嬉しいラクに書ける、シンプルで書きやすいわかりやすい、悩まない思い通りに操れる13年5月29日水曜日
  36. 36. HAPPY HACKING楽しいって何かプログラマーズハイ・高揚感スーパーハカーな気分マジカルな感じ・支配感ゆけおれのコードよ13年5月29日水曜日
  37. 37. HAPPY HACKINGLaravelにあるものしっかりした枠組みプログラミングを楽しくしてくれる仕組みプログラミングのレベルを底上げしてくれるような思想13年5月29日水曜日
  38. 38. HAPPY HACKINGIoC Containerによるパワフルで賢い依存性解決シンプルでクリーンな設計思想・記述軽量で追いやすいコアコード実績のある基盤(symfony component)柔軟性、拡張性13年5月29日水曜日
  39. 39. HAPPY HACKINGStaticメソッド多用IoC Container x Facadeにより解決しました新しいフレームワークって色々不安信頼と実績のSymfony Componentが基盤になりました命名規則が好みではない好みな感じ(PSR-1準拠)になりましたLaravel3のとき気になってたあれらはどうなったのか13年5月29日水曜日
  40. 40. HAPPY HACKINGもはやハッピーな感じしかしない13年5月29日水曜日
  41. 41. HAPPY HACKINGということでLaravel4でブログをつくってみました13年5月29日水曜日
  42. 42. POCHIKAポーチカ13年5月29日水曜日
  43. 43. POCHIKALaravel4でつくった軽量ブログエンジンデータベースは使わず、markdownファイルを変換jekyll風味(けどstatic file generatorではない)php的に動的に動作するキャッシュとかプラグインとか13年5月29日水曜日
  44. 44. POCHIKA使ってる機能RoutingConfigControllerError & LoggingCacheEventsIoC ContainerView / Templates / BladeUnit TestingArtisan CLIまだ使ってない機能Forms & HTMLDatabaseEloquent ORMLocalizationQueuesMailSecuritySessionValidation13年5月29日水曜日
  45. 45. http://github.com/ohida/pochikaPOCHIKA13年5月29日水曜日
  46. 46. LARAVEL413年5月29日水曜日
  47. 47. LARAVEL4IoC Container / FacadeIlluminate / composer / symfony componentspsr-0(autoload) / psr-1(coding standard)その他色々パワーアップ3からの変更点13年5月29日水曜日
  48. 48. LARAVEL4IoC Container... どのように依存性を解決するかFacade... シンプルで強力なインターフェイスおまけ:UnitTest... IoC ContainerとFacadeが必要な理由13年5月29日水曜日
  49. 49. IOC CONTAINER13年5月29日水曜日
  50. 50. IOC CONTAINERIoC ... Inversion of Control制御の逆転13年5月29日水曜日
  51. 51. IOC CONTAINER“The IoC container is at theheart of the entire applicationand all dependencies areresolved through that.”Taylor OtwellさんIoC Containerはアプリケーション全体における心臓部で、すべての依存性を解決します。13年5月29日水曜日
  52. 52. IOC CONTAINERThe Laravel inversion of control container is a powerful tool for managing classdependencies. Dependency injection is a method of removing hard-coded classdependencies. Instead, the dependencies are injected at run-time, allowing forgreater flexibility as dependency implementations may be swapped easily.http://four.laravel.com/docs/iocLaravelのIoCコンテナはクラス依存性解決のためのパワフルなツールです。DI(依存性の注入)はコードによるクラス解決を取り除き、代わりにアプリケーションの実行時に依存性を注入します。このことにより依存の実装を容易に入れ替えられるという柔軟性を得ることができます。13年5月29日水曜日
  53. 53. IOC CONTAINERBasic Usage13年5月29日水曜日
  54. 54. IOC CONTAINER$foo = new Foo;13年5月29日水曜日
  55. 55. IOC CONTAINER$foo = App::make(Foo);13年5月29日水曜日
  56. 56. IOC CONTAINERApp::bind(foo, function() { return new Foo;});$foo = App::make(foo);13年5月29日水曜日
  57. 57. IOC CONTAINER$view = new SmartyView;"App::bind(view, function() {$smarty = new SmartyView;$smarty->..return $smarty;});$view = App::make(view);13年5月29日水曜日
  58. 58. IOC CONTAINER$view = new TwigView;"App::bind(view, function() {return new TwigView([..]);});$view = App::make(view);13年5月29日水曜日
  59. 59. IOC CONTAINERクラスを「直接」呼ぶのではなくIoC Containerを通して「間接的」に呼び出す13年5月29日水曜日
  60. 60. IOC CONTAINERクラスが必要になった時IoC Containerさんがよしなにつくってくれる13年5月29日水曜日
  61. 61. IOC CONTAINER僕:IoCさん、僕がfeedくれっていったらAtomFeedのことですからよろしくですよIoCさん:(o e o)アイヨ∼そしてその時がきた∼僕:「feedくれ!」IoCさん:(o e o)つ アイヨ ∼【AtomFeed】13年5月29日水曜日
  62. 62. IOC CONTAINER登録App::bind(feed, function() { return new AtomFeed;});使う$feed = App::make(feed);echo $feed->generate(); //render xml/atom13年5月29日水曜日
  63. 63. IOC CONTAINER登録App::bind(feed, function() { return new RssFeed;});使う$feed = App::make(feed);echo $feed->generate(); //render xml/rss13年5月29日水曜日
  64. 64. IOC CONTAINERsingletonもIoCが解決App::singleton(foo, function(){return new FooBar;});13年5月29日水曜日
  65. 65. IOC CONTAINER既にあるインスタンスを登録することも$foo = new Foo;App::instance(foo, $foo);13年5月29日水曜日
  66. 66. IOC CONTAINERAutomatic ResolutionThe IoC container is powerful enough to resolveclasses without any configuration at all in manyscenarios.IoCコンテナは強力なので、多くの場合においてクラス解決のために何かをする必要はありません。13年5月29日水曜日
  67. 67. IOC CONTAINERclass FooBar {public function __construct(Baz $baz){$this->baz = $baz;}}$foobar = new FooBar(new Baz);13年5月29日水曜日
  68. 68. IOC CONTAINERclass FooBar {public function __construct(Baz $baz){$this->baz = $baz;}}$foobar = App::make(‘FooBar’);13年5月29日水曜日
  69. 69. IOC CONTAINERclass FooBar {public function __construct(PiyoInterface $baz){$this->baz = $baz;}}IoCさん (o e o)Interfaceかー 解決できねー...orzなんていうことはなく13年5月29日水曜日
  70. 70. IOC CONTAINERApp::bind(‘PiyoInterface’, Poyo);# PiyoInterfaceが呼ばれたらPoyoのことなんだからね13年5月29日水曜日
  71. 71. IOC CONTAINERclass FooBar {public function __construct(PiyoInterface $baz){$this->baz = $baz;}}App::bind(‘PiyoInterface’, Poyo);App::make(‘FooBar’);(o e o)/13年5月29日水曜日
  72. 72. IOC CONTAINERclass Eva {public function __construct(PilotInterface $pilot){$this->pilot = $pilot;}}App::bind(‘PilotInterface’, ‘Ayanami’)$eva = App::make(‘Eva’);# get_class($eva->pilot) == ‘Ayanami’13年5月29日水曜日
  73. 73. Practical Usage実用例IOC CONTAINER13年5月29日水曜日
  74. 74. IOC CONTAINERclass OrderController extends BaseController {public function __construct(OrderRepository $orders){$this->orders = $orders;}public function getIndex(){$all = $this->orders->all();return View::make(orders, compact(all));}}13年5月29日水曜日
  75. 75. IOC CONTAINER$orders = new OrderRepository();new OrderController($orders);App::bind(‘OrderRepository’, ‘MockOrders’)App::make(‘OrderControler’)普通に書くとデータベースへの接続が発生IoCを使うとスタブで置き換えられる13年5月29日水曜日
  76. 76. IOC CONTAINERIn this example, the OrderRepository class will automatically be injectedinto the controller. This means that when unit testing a "mock"OrderRepository may be bound into the container and injected into thecontroller, allowing for painless stubbing of database layer interaction.この例では、OrderRepositoryクラスは自動的にコントローラーに注入されます。このことは、ユニットテストの際にモックのOrderRepositoryクラスをコントローラに注入することができ、データベース操作部分のスタブ化が容易になることを意味しています。13年5月29日水曜日
  77. 77. IOC CONTAINERまとめIoCとは、Inversion Of Control(制御の逆転)よしなにクラスをつくってくれるよしなに依存関係を解決してくれるテストもしやすくなる13年5月29日水曜日
  78. 78. FACADE13年5月29日水曜日
  79. 79. Facade(ファサード)とは「建物の正面」を意味する。(wikipediaより)FACADE13年5月29日水曜日
  80. 80. FACADEなんの正面か = クラス13年5月29日水曜日
  81. 81. FACADEPage::find(about);13年5月29日水曜日
  82. 82. FACADEBehind the scene13年5月29日水曜日
  83. 83. FACADEclass Page {private static $pages;public static function find($name){return self::$pages[$name];}}# なるほどstaticね。Pageクラスの中身はこんな感じかなPage::find(about);13年5月29日水曜日
  84. 84. FACADEPage::find(about);class Page {private $pages;public function find($name){return $this->pages[$name];}}# ちがうよ。Pageクラスはstaticメソッド持ってないよ13年5月29日水曜日
  85. 85. FACADEPage::find(about);Pageクラスではなく、実はFacadeが呼ばれている13年5月29日水曜日
  86. 86. FACADEPage::method()って書いたら、普通はPageクラスがよばれるそして ”そのメソッドはstaticに呼べません”というエラーが出るFacadeを介すには?13年5月29日水曜日
  87. 87. FACADEPage::method()って書いたら、Facadeの方よんでねとLaravelに教えるapp/config/app.phpに書くaliases = [‘Page’ => ‘FacadesPage’,];13年5月29日水曜日
  88. 88. FACADE<?php namespace PochikaFacades;use IlluminateSupportFacadesFacade;class Page extends Facade {/*** Get the registered name of the component.** @return string*/protected static function getFacadeAccessor(){return page; // IoC Containerが解決できる名前}}13年5月29日水曜日
  89. 89. FACADEPage::find(‘about’);"Pageファサード"App::resolve(‘page’)->find(‘about’);13年5月29日水曜日
  90. 90. FACADE$this->input->get(‘hoge’);"Input::get(‘hoge‘);13年5月29日水曜日
  91. 91. FACADE$view = new View;$view->render(‘index.html’);"View::make(‘index.html’);13年5月29日水曜日
  92. 92. FACADEどこからでも単独で呼び出せる$thisって誰?を意識しない誰でもいいしいなくてもいい疎結合依存性、コンテキストの排除統一されたクリーンなインターフェイス$this->hogeだったりnew Fuga()だったりしない13年5月29日水曜日
  93. 93. FACADEまとめFacadeを利用することで、シンプルで強力なインターフェイスでクラスを扱うことができる13年5月29日水曜日
  94. 94. FACADELaravel4はIoC ContainerとFacadeがキモLaravel4使うなら最初に理解するべきポイント13年5月29日水曜日
  95. 95. FACADERouterRouter::get(‘/’,‘IndexController@index’);EventEvent::fire(‘post.converted’);ViewView::make(‘index.html’, $payload);13年5月29日水曜日
  96. 96. UNITTEST13年5月29日水曜日
  97. 97. UNITTESTテストしやすい/しにくいってなにかStaticメソッドでテストが難しいのはなぜか13年5月29日水曜日
  98. 98. UNITTESTUnitTestではテスト毎に初期化されることが前提前のテストの影響をうけるとまともなテストにならない13年5月29日水曜日
  99. 99. UNITTESTstaticオブジェクトにはconstructorとdestructorがない初期化処理と終了処理が行われない始まりと終わりがないひとつのテストによって生じた状態をクリアできない13年5月29日水曜日
  100. 100. UNITTESTfunction testEach(){PostRepository::each(function($post) {$post->title .= ‘:hoge’;});$this->assertHoge(..);}function testHoge(){$posts = PostRepository::load();↑ testEachの処理を経た状態になっている..}class PostRepository {private static $posts = [];public static function load(){return self::$posts;}public static function each ($func){array_walk(self::$posts, $func);}}テストクラス13年5月29日水曜日
  101. 101. まとめ13年5月29日水曜日
  102. 102. まとめLaravel4は3のときのよさ(クリーンさとか)はそのままにIoC Containerとかcomposerで中身がおとなになったテストもしやすい(規模に関わらずテストは必要)PHPもここまで来たかくらいイケてる感じで書ける13年5月29日水曜日
  103. 103. LARAVEL4たのしい☆彡のでみんなつかおう(自分に合うかは見極めよう)13年5月29日水曜日
  104. 104. 13年5月29日水曜日
  105. 105. http://solvalou.net/http://twitter.com/ohidahttp://www.facebook.com/takashi.ohidahttp://github.com/ohidaTakashi Ohida13年5月29日水曜日

×