DI : Dependency Injectionとは
自分で調べてください:-p
DIについては詳しい人たちがまとめてくれているので、僕はあくまでもObjective C上のDIコンテナである、Typhoonに関する話だけを書こうと思います。
Javaで発展したデザインパターンなので、サンプルとしてはGoogle Guiceがオススメです。
Typhoon Framework
Objective C用のDIコンテナです。Google Guiceのような使い勝手とまでは言いませんが、自分でなんちゃってDIをやるよりははるかに柔軟です。
公式サイト
ただ、このページは 無駄に いろいろな情報が載っているので、github上のドキュメント見た方がシンプルで分かりやすいです。
https://github.com/typhoon-framework/Typhoon/wiki/Assembling-Components-with-Blocks
Install方法
Cocoa Podsから入れられます。
http://cocoapods.org/?q=Typhoon
Cocoa Podsを使っていない人は、、まずcocoa podsを入れましょう:-p
http://guides.cocoapods.org/using/getting-started.html
DIコンテナへの依存
DIを導入するために、Typhoon Frameworkに強依存するのは本末転倒だと思います。
それを回避するため、下記のようなInjectorインタフェイスを用意し、DIのInjector自体を注入する形で設計を進めて行きます。
#import <Foundation/Foundation.h>
@protocol BTKInjector <NSObject>
- (id) instanceForProtocol : (Protocol *)protocol;
@end
@interface BTKInjectorDefault : NSObject
+ (id<BTKInjector>) get;
@end
これによりTyphoon Frameworkに関する記述は局所化できるので、他のDIコンテナにも簡単に乗り換えることができます。コンポーネント間のインタフェイスを明示的に定義し、依存関係の定義はDIにまかせる。DIの基本ですね。
Typhoon Framework独自の機能について
Autowiring等も触ってはみましたが、黒魔術的な側面が強すぎてかえって見通しが悪くなるように感じます。非常に多機能で面白いフレームワークですが、まずはシンプルに使ってみることをお勧めします。