[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
SlideShare a Scribd company logo
BEAR.Sunday $app
BEAR.Sunday meetup #1 17/Feb/2013 (Sun)
ソフトウエアの原則
依存関係逆転の原則

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


• NG サービスロケーター
   キーで取得できる実装に依存




        http://www.flickr.com/photos/rgidra/4256316243/
生成使用分離の原則

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

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

• オブジェクトの生成 は具象 を取り扱う
         生成 具象
デメテルの原則

• 最小知識の原則
• 必要のないオブジェクトは受け取らない
• NG $c = $obj->getB()->getC();
• OK $c = $obj->getB()->publicC
Tell, Don t ask.

• OK $dog->walk();
• OK $model->render();
• NG $renderer->set($model-
 >name)->render();
Solution ?
DI + AOP
インターフェイスとクラスを束縛します
@Injectを付けたメソッドに注入されます
束縛の集合がモジュールです
モジュールはモジュールを利用できます
実行モードに応じて束縛は変わります




APIならJSON出力、Devなら詳細なログ...
振る舞い
モードに応じて振る舞いを変えるのでなく




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




            OK


修正に閉じ、変更に開いています(OCP)
AOP
Aspect Oriented Programming
注釈と横断的関心時を束縛
注釈を解釈
ここでは「クラスに@Dbと注釈がある」&
「”on”で始まっている」メソッドにはDBを
セットするDBインジェクターを束縛 してい
               束縛
ます。 DBインジェクターはメソッドによっ
てmaster/slaveを選択しDBオブジェクトを注
入します。 利用側、被利用側ともにDB取得
の関心が分離されています。
モードに応じた構成で全てが束縛され...
                  Dependency + Aspects
インジェクターでアプリケーションを取得します
アプリケーションは依存を持ちます
依存も依存を持ちます
依存の依存..と取得を続け
巨大な”アプリケーションオブジェクトグラフ”を得ます
アプリケーションはシリアライズ可能で
リクエストを超え再利用されます。


アノテーションと束縛を使った膨大なオブジェクトコ
ンストラクションコストは原理的にほとんどなくなり
ます。
コンストラクタはリクエストを超えて1度しかコールさ
れず、そのときプロパティに代入した値はキャッシュ
されます。


構成に応じたコードはコンストラクタ、そうでないも
のはメソッドと区別できます。
アプリケーションはスクリプトでも取得できます
他のシステムからの利用が容易です




より長期間の運用を可能にします
アプリケーションスクリプトでサービスを記述




        自由な構成が可能です
アプリケーションオブジェクトまとめ


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

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

More Related Content

BEAR.Sunday $app