php coding in bear.sunday

23
PHP Coding in BEAR.Sunday PHP勉強会 28/Feb/2013

Upload: akihito-koriyama

Post on 10-May-2015

664 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: PHP Coding in BEAR.Sunday

PHP Codingin BEAR.Sunday

PHP勉強会 28/Feb/2013

Page 2: PHP Coding in BEAR.Sunday

テキスト

Page 3: PHP Coding in BEAR.Sunday

OOPの原則

Page 4: PHP Coding in BEAR.Sunday

依存関係逆転の原則

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

NG

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

実クラスに依存

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

Page 5: PHP Coding in BEAR.Sunday

生成使用分離の原則

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

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

使用

生成

抽象

具象

Page 6: PHP Coding in BEAR.Sunday

デメテルの原則

•最小知識の原則•必要のないオブジェクトは受け取らない

Page 7: PHP Coding in BEAR.Sunday

この4つのみ•オブジェクト自身 ($this->m())

•自分自身が属性として保持しているインスタンス ($this->a ->m())

•自分自身へパラメ〡タとして渡されたオブジェクト ($param->m())

•自分自身のメソッド内で生成したオブジェクト ((new A)->m())

Page 8: PHP Coding in BEAR.Sunday

デメテルの原則

• $c = $obj->getB()->getC();• $c = $obj->getB()->publicCOK

NG

Page 9: PHP Coding in BEAR.Sunday

Tell, Don’t Ask.

Page 10: PHP Coding in BEAR.Sunday

TellObjectLogic

Logic

ValVal

Object Oriented

Page 11: PHP Coding in BEAR.Sunday

AskObjectLogic

Logic

Val

Val

Procedural

Page 12: PHP Coding in BEAR.Sunday

Tell, Don’t ask.

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

OK

OK

NG

Page 13: PHP Coding in BEAR.Sunday

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

NG

Page 14: PHP Coding in BEAR.Sunday

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

OK

修正に閉じ、変更に開いています(OCP)=開放/閉鎖原則

Page 15: PHP Coding in BEAR.Sunday

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

Page 16: PHP Coding in BEAR.Sunday

依存も依存を持ちます

Page 17: PHP Coding in BEAR.Sunday

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

Page 18: PHP Coding in BEAR.Sunday

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

Page 19: PHP Coding in BEAR.Sunday

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

Page 20: PHP Coding in BEAR.Sunday

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

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

Page 21: PHP Coding in BEAR.Sunday

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

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

Page 22: PHP Coding in BEAR.Sunday

これはモデルにインジェクトされたレンダラーですObject>Renderer>TemplateEngine>Smartyと構成されています

Page 23: PHP Coding in BEAR.Sunday

Smartyがクラス設計的にあまりよくない(多くのプロパティを持ち過ぎている)事がオブジェクトグラフから分かります。