PHP Coding in BEAR.Sunday PHP勉強会 28/Feb/2013
PHP Codingin BEAR.Sunday
PHP勉強会 28/Feb/2013
テキスト
OOPの原則
依存関係逆転の原則
•具体的な実装に依存してはいけない•抽象に依存する•× スタティックコール• サービスロケーターNG
NG
キーで取得できる実装に依存
実クラスに依存
http://www.flickr.com/photos/rgidra/4256316243/
生成使用分離の原則
•オブジェクトは生成するか利用するかのどちらかで、どちらも同時にしてはいけない
•オブジェクトの使用 は抽象 を取り扱う•オブジェクトの生成 は具象 を取り扱う
使用
生成
抽象
具象
デメテルの原則
•最小知識の原則•必要のないオブジェクトは受け取らない
この4つのみ•オブジェクト自身 ($this->m())
•自分自身が属性として保持しているインスタンス ($this->a ->m())
•自分自身へパラメ〡タとして渡されたオブジェクト ($param->m())
•自分自身のメソッド内で生成したオブジェクト ((new A)->m())
デメテルの原則
• $c = $obj->getB()->getC();• $c = $obj->getB()->publicCOK
NG
Tell, Don’t Ask.
TellObjectLogic
Logic
ValVal
Object Oriented
AskObjectLogic
Logic
Val
Val
Procedural
Tell, Don’t ask.
• $dog->walk();• $model->render();• $renderer->set($model->name)->render();
OK
OK
NG
モードに応じて振る舞いを変えるのでなく振る舞い
NG
モードに応じて振るを変えます構成
OK
修正に閉じ、変更に開いています(OCP)=開放/閉鎖原則
アプリケーションは依存を持ちます
依存も依存を持ちます
依存の依存..と取得を続け
巨大な”アプリケーションオブジェクトグラフ”を得ます
アプリケーションはシリアライズ可能で
リクエストを超え再利用されます。
アノテーションと束縛を使った膨大なオブジェクトコンストラクションコストは原理的にほとんどなくなります。
コンストラクタはリクエストを超えて1度しかコールされず、そのときプロパティに代入した値はキャッシュされます。
構成に応じたコードはコンストラクタ、そうでないものはメソッドと区別できます。
これはモデルにインジェクトされたレンダラーですObject>Renderer>TemplateEngine>Smartyと構成されています
Smartyがクラス設計的にあまりよくない(多くのプロパティを持ち過ぎている)事がオブジェクトグラフから分かります。