7. DI コンテナ Unity の概要
ビジネスアプリ開発用 「依存関係注入」 コンテナライブラリ
⁃ Microsoft patterns & practices チームが進めているプロジェクト成果物のひとつ
⁃ 軽量で柔軟性の高い DI コンテナとその実践パターンを提供
⁃ Dependency Injection:依存関係注入とは実行時に外部からオブジェクトの振る舞いを決定する機能
Inversion of Control:制御の反転を
実現する有力な設計パターンのひとつ
Instance
Resolution
Life Time
Controll
Constructor
Injection
Property
Injection
Method
Injection
8. Service B
DI コンテナ Unity の概要
Service A
Client
Service B
DI Container
Client
Service A Service
Interface
インスタンス生成サービス実装の解決
依存関係の注入
サービス利用
サービス利用
通常の設計(制御側がサービス実装に依存する) 依存関係注入の設計(サービス実装が制御側により決定される)
Inversion of Control:制御の反転を実現する 「依存関係の注入」
⁃ クライアントクラスからサービスクラスを利用する場合、クライアント側がサービス側の変更に影響を受けてしまう
⁃ サービスクラスは共通インタフェースを実装して内部実装を隠ぺいする
⁃ DI コンテナがクライアントインスタンスを生成しサービスクラスを渡すことで制御を反転させる
9. DI コンテナ Unity の概要
DI コンテナ「Unity」が Xamarin の救世主となるワケ
⁃ C# の Xamarin 対応 PCL として提供されている DI コンテナ
⁃ もちろんライセンス形態は iOS、Android に利用できる Apache 2.0 ライセンス
⁃ Xamarin では各プラットフォームごとの処理記述が冗長になりやすい
⁃ Xamarin では共通コードに各プラットフォームごとの分岐処理が入り込みやすい
Instance
Resolution
Life Time
Controll
Constructor
Injection
Property
Injection
Method
Injection
10. DI コンテナ Unity の概要
DI コンテナ「Unity」が Xamarin の救世主となるワケ
⁃ 冗長な処理記述 → 抽出したインタフェース実装で共通機能に集約される
⁃ 共通コードに分岐処理が入り込む → 分岐処理は DI コンテナが肩代わり
⁃ 共通処理と固有処理が整理され、クラス間の依存性が下がる
iOS
PCL / Shared
Windows
クラス間が密結合で、共通コードが各プラットフォームに依存 制御が反転し、共通コードがプラットフォーム依存から分離される
Android
iOS
PCL / Shared
Windows
Androidコード
保守性
テスト
容易性
開発
生産性
コード
保守性
テスト
容易性
開発
生産性