laravel / lumen 次の一歩

Post on 25-Jul-2015

586 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Laravel / Lumen 次の一歩ytake / 20150529 Laravel LT at JP

Profile

• ytake (github), ex_takezawa(twitter)

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

4章を担当させていただきました

Containerなど盛り沢山

Facade Really useful :)

!= GoF Facades

Facadeを利用する上での問題

• static だと思ってしまう。(養成読本をどうぞ!)

• 確かに楽ですが、テストコード正しく書けてますか?

• どこでも簡単に使えるので、非構造化になりがち

Eloquentも同じ

public function getEntries() { $entries = \Entry::all() ->toArray(); if(!count($entries)) { throw new \Exception; } }

$eloquentMock = m::mock(‘overload:App\Repositories\Eloquent\Entry');

$collection = m::mock(‘Illuminate\Database\Eloquent\Collection');

$eloquentMock ->shouldReceive(‘all') ->andReturn($collection);

$collection->shouldReceive(‘toArray') ->andReturn([1, 2, 3]);

次のステップにいくには 構造化を考えることが大事

インターフェース/疎結合

インターフェース 具象クラス

バインド

インターフェース 具象クラス

インターフェース 具象クラス

インターフェース 具象クラス

インターフェース 具象クラス

インターフェース 具象クラス

インターフェース 具象クラス

コンテナ

*イメージ

コンストラクタ・メソッド インジェクションで解決

HogeClass constructor 具象クラス

インターフェース

HogeClass

hogeと名付けようサービスロケータなど

名前 具象クラス

名前 具象クラス

インターフェース 具象クラス

インターフェース 具象クラス

名前 具象クラス

インターフェース 具象クラス

コンテナ

*イメージ

Facade

具象クラスインターフェース 名前

*関連性にアクセスするためのもの

// バインディング $this->app->bind( 'App\Hogeable', 'App\Hoge' ); // 関係性にアクセサ名 $this->app->bind('hoge', function() { return $this->app->make('App\Hogeable'); });

バインドの次は、 Facadeの実クラスを知ること よりテストがしやすく 補完にもやさしい

DB => DatabaseManager

Redirect => Redirector

+ UrlGenerator + RouteCollection

+ Request

概念も分離

DB

リポジトリ

エンティティ

Eloquent / ORM

ストレージ リポジトリ

DBに依存してはならない

HogeClass

リポジトリ

サービスI/F

I/F

Route

formRequest

Controller

beforemiddleware

aftermiddleware

view

Route

formRequestController

beforeafter

view

サービスI/F

リポジトリI/F

dispatch

分離することで見えてくるフレームワーク

本当のLaravelはここから

ご静聴ありがとうございました

top related