php coding in bear.sunday

Post on 10-May-2015

658 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related