phpでdiする

Post on 17-Jan-2017

11.779 Views

Category:

Engineering

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

@secret_hamuhamu

PHPでDIする

自己紹介①

名前:大橋 勇希

ニックネーム : はむ

アカウント:@secret_hamuhamu

自己紹介②

お仕事:Webアプリケーションエンジ二ア

使用言語:主にPHP, Perl, R

設計スタイル:なんちゃってTDD / DDD

今回のテーマ

DI

Dependency Injection

依存性の注入

依存性とは?

あるオブジェクトを

使用するには、

別のオブジェクトが

必要なこと

必要なCarクラスを使用するために

必要な依存しているオブジェクトが存在する

必要なDependency Lookup

Dependency Lookup

依存性の探索

Car

Engine

Handle

Pedal

依存の向き

Car

Engine

Handle

Pedal

Carクラスが依存しているオブジェクトを探索している

Dependency Lookup

● 結合度が高い● テストしにくい

DIを使ったパターン

依存しているオブジェクトを注入する

利用側

Car

Engine

Handle

Pedal

Car

Engine

Handle

Pedal

Carクラスに依存しているオブジェクトを注入する

Dependency Injection

● 疎結合● テスタビリティの向上

Dependency Injection

実現方法3パターン

Dependency Injection(1) コンストラクタ・インジェクション

Dependency Injection(1) コンストラクタ・インジェクション

(2) メソッド・インジェクション

Dependency Injection(1) コンストラクタ・インジェクション

(2) メソッド・インジェクション

(3) セッタ・インジェクション

Dependency Injection(1) コンストラクタ・インジェクション

(2) メソッド・インジェクション

(3) セッタ・インジェクション

Dependency Injectionデメリット

● DI対象クラスの生成コストが高い

● 引数の変更に弱い

DI対象のクラスを生成するのが大変

利用側

引数が変更された場合

利用側

Carクラスの利用者が多ければ変更が大変

利用側

DIの設定を管理することができれば、解決できる

DIコンテナ

● 依存性の注入

● インスタンスの生成

一元管理

DIコンテナ

● Pimple● PHP-DI

etc...

Car

Engine

Handle

PedalDIコンテナ

依存の向き

Car

Engine

Handle

PedalDIコンテナ

DIコンテナがクラスのインスタンス生成方法を知っている

依存の向き

Car

Engine

Handle

PedalDIコンテナ

DIコンテナに登録されるクラスはDIコンテナを知らなくてよい

依存の向き

Car

Engine

Handle

PedalDIコンテナ依存性の注入を

一元管理

依存の向き

DIコンテナ利用側

依存の向き

DIコンテナ利用側利用側は、依存性を知らなくてよい

依存の向き

利用側

DIコンテナ

Carクラスの引数を変更したい

DIコンテナ

DIコンテナ

HightEngineに変更するだけでよい

DIコンテナ

HightEngineに変更するだけでよい

引数の変更が簡単

ただし、Carクラスに手を入れないといけない

実装に依存している

抽象に依存すべき

依存関係逆転の原則(DIP)

抽象であるInterfaceに変更

DIコンテナ+

テスト

実装への

依存がなくなり

変更に強い

まとめ

DIしようぜ!!!

ご清聴ありがとうございました

top related