bear.sunday $app

31
BEAR.Sunday $app BEAR.Sunday meetup #1 17/Feb/2013 (Sun)

Upload: akihito-koriyama

Post on 10-May-2015

3.866 views

Category:

Documents


1 download

DESCRIPTION

about the application of BEAR.Sunday PHP web framework.

TRANSCRIPT

Page 1: BEAR.Sunday $app

BEAR.Sunday $appBEAR.Sunday meetup #1 17/Feb/2013 (Sun)

Page 2: BEAR.Sunday $app

ソフトウエアの原則

Page 3: BEAR.Sunday $app

依存関係逆転の原則

•具体的な実装に依存してはいけない•抽象に依存する•× スタティックコール• サービスロケーターNG

NG

キーで取得できる実装に依存

実クラスに依存

http://www.flickr.com/photos/rgidra/4256316243/

Page 4: BEAR.Sunday $app

生成使用分離の原則

•オブジェクトは生成するか利用するかのどちらかで、どちらも同時にしてはいけない

•オブジェクトの使用 は抽象 を取り扱う•オブジェクトの生成 は具象 を取り扱う

使用

生成

抽象

具象

Page 5: BEAR.Sunday $app

デメテルの原則

•最小知識の原則•必要のないオブジェクトは受け取らない• $c = $obj->getB()->getC();• $c = $obj->getB()->publicCOK

NG

Page 6: BEAR.Sunday $app

Tell, Don’t ask.

• $dog->walk();• $model->render();• $renderer->set($model->name)->render();

OK

OK

NG

Page 7: BEAR.Sunday $app

Solution ?

Page 8: BEAR.Sunday $app

DI + AOP

Page 9: BEAR.Sunday $app

インターフェイスとクラスを束縛します

Page 10: BEAR.Sunday $app

@Injectを付けたメソッドに注入されます

Page 11: BEAR.Sunday $app

束縛の集合がモジュールです

Page 12: BEAR.Sunday $app

モジュールはモジュールを利用できます

Page 13: BEAR.Sunday $app

実行モードに応じて束縛は変わります

APIならJSON出力、Devなら詳細なログ...

Page 14: BEAR.Sunday $app

モードに応じて振る舞いを変えるのでなく振る舞い

NG

Page 15: BEAR.Sunday $app

モードに応じて振るを変えます構成

OK

修正に閉じ、変更に開いています(OCP)

Page 16: BEAR.Sunday $app

AOPAspect Oriented Programming

Page 17: BEAR.Sunday $app

注釈と横断的関心時を束縛

Page 18: BEAR.Sunday $app

注釈を解釈ここでは「クラスに@Dbと注釈がある」&「”on”で始まっている」メソッドにはDBをセットするDBインジェクターを束縛 しています。 DBインジェクターはメソッドによってmaster/slaveを選択しDBオブジェクトを注入します。 利用側、被利用側ともにDB取得の関心が分離されています。

束縛

Page 19: BEAR.Sunday $app

モードに応じた構成で全てが束縛され...

Dependency + Aspects

Page 20: BEAR.Sunday $app

インジェクターでアプリケーションを取得します

Page 21: BEAR.Sunday $app

アプリケーションは依存を持ちます

Page 22: BEAR.Sunday $app

依存も依存を持ちます

Page 23: BEAR.Sunday $app

依存の依存..と取得を続け

Page 24: BEAR.Sunday $app

巨大な”アプリケーションオブジェクトグラフ”を得ます

Page 25: BEAR.Sunday $app

アプリケーションはシリアライズ可能で

Page 26: BEAR.Sunday $app

リクエストを超え再利用されます。

アノテーションと束縛を使った膨大なオブジェクトコンストラクションコストは原理的にほとんどなくなります。

Page 27: BEAR.Sunday $app

コンストラクタはリクエストを超えて1度しかコールされず、そのときプロパティに代入した値はキャッシュされます。

構成に応じたコードはコンストラクタ、そうでないものはメソッドと区別できます。

Page 28: BEAR.Sunday $app

アプリケーションはスクリプトでも取得できます

Page 29: BEAR.Sunday $app

他のシステムからの利用が容易です

より長期間の運用を可能にします

Page 30: BEAR.Sunday $app

アプリケーションスクリプトでサービスを記述

自由な構成が可能です

Page 31: BEAR.Sunday $app

アプリケーションオブジェクトまとめ

•DI/AOPでOOP原則に従う•アプリケーションは1つの変数、巨大なオブジェクトグラフ

•スクリプトから準備なしに取得できる•アプリケーションスクリプトでサービスを記述