bear.sunday $app
DESCRIPTION
about the application of BEAR.Sunday PHP web framework.TRANSCRIPT
BEAR.Sunday $appBEAR.Sunday meetup #1 17/Feb/2013 (Sun)
ソフトウエアの原則
依存関係逆転の原則
•具体的な実装に依存してはいけない•抽象に依存する•× スタティックコール• サービスロケーターNG
NG
キーで取得できる実装に依存
実クラスに依存
http://www.flickr.com/photos/rgidra/4256316243/
生成使用分離の原則
•オブジェクトは生成するか利用するかのどちらかで、どちらも同時にしてはいけない
•オブジェクトの使用 は抽象 を取り扱う•オブジェクトの生成 は具象 を取り扱う
使用
生成
抽象
具象
デメテルの原則
•最小知識の原則•必要のないオブジェクトは受け取らない• $c = $obj->getB()->getC();• $c = $obj->getB()->publicCOK
NG
Tell, Don’t ask.
• $dog->walk();• $model->render();• $renderer->set($model->name)->render();
OK
OK
NG
Solution ?
DI + AOP
インターフェイスとクラスを束縛します
@Injectを付けたメソッドに注入されます
束縛の集合がモジュールです
モジュールはモジュールを利用できます
実行モードに応じて束縛は変わります
APIならJSON出力、Devなら詳細なログ...
モードに応じて振る舞いを変えるのでなく振る舞い
NG
モードに応じて振るを変えます構成
OK
修正に閉じ、変更に開いています(OCP)
AOPAspect Oriented Programming
注釈と横断的関心時を束縛
注釈を解釈ここでは「クラスに@Dbと注釈がある」&「”on”で始まっている」メソッドにはDBをセットするDBインジェクターを束縛 しています。 DBインジェクターはメソッドによってmaster/slaveを選択しDBオブジェクトを注入します。 利用側、被利用側ともにDB取得の関心が分離されています。
束縛
モードに応じた構成で全てが束縛され...
Dependency + Aspects
インジェクターでアプリケーションを取得します
アプリケーションは依存を持ちます
依存も依存を持ちます
依存の依存..と取得を続け
巨大な”アプリケーションオブジェクトグラフ”を得ます
アプリケーションはシリアライズ可能で
リクエストを超え再利用されます。
アノテーションと束縛を使った膨大なオブジェクトコンストラクションコストは原理的にほとんどなくなります。
コンストラクタはリクエストを超えて1度しかコールされず、そのときプロパティに代入した値はキャッシュされます。
構成に応じたコードはコンストラクタ、そうでないものはメソッドと区別できます。
アプリケーションはスクリプトでも取得できます
他のシステムからの利用が容易です
より長期間の運用を可能にします
アプリケーションスクリプトでサービスを記述
自由な構成が可能です
アプリケーションオブジェクトまとめ
•DI/AOPでOOP原則に従う•アプリケーションは1つの変数、巨大なオブジェクトグラフ
•スクリプトから準備なしに取得できる•アプリケーションスクリプトでサービスを記述