Your SlideShare is downloading. ×
0
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Iocコンテナについて
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Iocコンテナについて

93

Published on

laravelのiocコンテナについて

laravelのiocコンテナについて

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
93
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. IoCコンテナについて
  • 2. プロフィール 氏名:寺山 昭夫 twitter: trtraki
  • 3. アジェンダ 1. そもそもIoCって何? 2. IoCコンテナって何? 3. 実際何が嬉しいのか? 4. IoCコンテナの実例 5. Facadesを適応してみよう!
  • 4. 1. そもそもIoCって何? Inversion of Controlの略称で、制御の反転 と言う意味。
  • 5. どういうこと? 抽象化原則の一種で、手続き型プログラミン グと比較したとき、システムの制御の流れが 逆転しているソフトウェアアーキテクチャ設 計を表している。 参考:wikipediaより抜粋 http://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E3%81%AE%E5%8F%8D%E8%BB%A2
  • 6. だから、どういうこと?
  • 7. ClassAControllerと言うクラスは、
 処理を行う際は、ClassBをnewしている。
 処理の流れ的にはClassAController→ClassB と言う流れになっている。
 これをClassB→ClassAControllerと言うよう な流れに変える事を、IoC(制御の反転)と呼 ぶ。
  • 8. イメージ図 ClassAController ClassB
  • 9. イメージ図 ClassAController ClassB ClassB
  • 10. 2. IoCコンテナって何? IoCをあるオブジェクト(コンテナ)にまとめた もの。 実際にController側で使用する場合は、コン テナから取得する。 ※Laravel5ではサービスコンテナに名前が変 わっています。
  • 11. IoCコンテナ イメージ図 ClassAController ClassB ClassC IoCコンテナ ClassB
  • 12. 3. 実際何が嬉しいのか ある一定の単位コード毎にソースを分離する 事が出来る。(ソースが綺麗になる!) 単体テストと相性抜群!
  • 13. 4. IoCコンテナの実例 •サービスプロバイダーでインスタンス作成 •Controllerで依存性を注入
  • 14. これから説明する内容は↓の実例はこちら https://github.com/trtraki/ioc
  • 15. サービスプロバイダーでインスタンス作成 • app/Providers/TestServiceProvider.php public function register() { $this->app->bind('Testinterface', function($app) { return new Test($app['Test']); }); } • config/app.php 'AppProvidersTestServiceProvider' ※Laravel5のドキュメント例になります。他の記述の仕方もあります。
  • 16. Controllerで依存性を注入 • app/Http/Controllers/WelcomeController.php protected $test; ! public function __construct(Test $test) { $this -> test = $test; } public function index() { $this -> test ->addition($x, $y); }
  • 17. これだけすっきりしました https://github.com/trtraki/ioc/blob/master/ app/Http/Controllers/WelcomeController.php
  • 18. テストも書きやすくなりました。 https://github.com/trtraki/ioc/blob/master/ tests/service/CalculationTest.php
  • 19. IoCコンテナを使う事で、小さい単位でコー ドがまとまるようになりました。
  • 20. しかし
  • 21. まだControllerにユニットテストが導入され ていない状態です。
  • 22. 現状でも、Controllerのユニットテストを導入 出来ますが、楽に実装する仕組みがあります。
  • 23. Facadesです!
  • 24. 5. Facadesを適応してみよう!
  • 25. そもそもFacadesとは? •IoCコンテナに登録されているクラスの メソッドを、staticメソッドとして呼び 出せるようにする機構。
  • 26. 適応して嬉しい事は? •簡単にmockと置き換える事が出来 る。
  • 27. Facadesの実例 • Facades継承したクラスを作成す る。  ※IoCコンテナを導入している事が前提です。 ! • 別名の設定をする。
  • 28. Facadesの実例 • Facades継承したクラスを作成す る。  ※IoCコンテナを導入している事が前提です。 ! • 別名の設定をする。
  • 29. Facades継承したクラスを作成する。 • app/Facades/TestFacade.php <?php namespace AppFacades; use IlluminateSupportFacadesFacade; ! class TestFacade extends Facade { protected static function getFacadeAccessor() { return Testinterface'; } }
  • 30. 別名の設定をする。 • config/app.php ! 'TestFacade' => 'AppFacadesTestFacade', !
  • 31. そうすると ! $this -> test -> addition($x, $y); ! ! TestFacade:: addition($x, $y); ! • app/Http/Controllers/WelcomeController.php            ↓
  • 32. Facadesをmockに置き換える • mockeryをインストール ! • mockeryを使用するようにテスト を書く
  • 33. mockeryをインストール • composer.json ! "mockery/mockery": " 0.8" ! • 【php ./composer.phar update】でイン ストール
  • 34. mockeryを使用するようにテストを書く • tests/service/CalculationTest.php /** * * @expectedException ErrorException * */ public function testControllerMock() { TestFacade::shouldReceive('addition') ->once() ->with(2,3) ->andThrow(); WelcomeController::index(); } !
  • 35. これで外部ロジック部分を、簡単に置 き換える事が可能になりました! ! 必要な部分を好きにテスト出来るよう になりました!
  • 36. まとめ • IoCコンテナはユニットテストとの 相性が抜群! • 更に、Facadesも適応するとユニッ トテストを書くのが簡単に!
  • 37. 参考図書 http://www.amazon.co.jp/Laravel%E3%82%A8%E3%82%AD %E3%82%B9%E3%83%91%E3%83%BC%E3%83%88%E9%A4%8A %E6%88%90%E8%AA%AD%E6%9C%AC- %E3%83%A2%E3%83%80%E3%83%B3%E3%81%AA%E9%96%8B %E7%99%BA%E3%82%92%E5%AE%9F%E7%8F%BE %E3%81%99%E3%82%8BPHP%E3%83%95%E3%83%AC %E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF %EF%BC%81-Software-Design-plus/dp/4774173134
  • 38. では、皆さん良いIoCコンテナライフを!
  • 39. ご清聴ありがとうございました!

×