黒龍's Blog

明日から役立つ無駄知識をあなたに(仮)

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  170  : 記事  0  : コメント  2719  : トラックバック  26

ニュース

わんくま同盟に参加させていただきました。
どうぞよろしくお願いします。

自己紹介

コミュニティ

  • わんくま同盟
    わんくま同盟

書庫

がるさんとこより

DIコンテナって?
http://d.hatena.ne.jp/gallu/20060822/p2

がるさんも触れてるように一枚はさんで抽象化ってのがキモですね。

私もあまり詳しいわけではないので私なりの理解で書きます。

設計の原則で結合は疎なほうが望ましい。クラスへの依存より抽象(Interface)への依存のほうが望ましいというのに異論はないと思うのですがこの抽象への依存であるという前提に加えて実装への依存を設定ファイルに持っていったもの(newをファクトリメソッドに委譲する)といえます。こうすることによってどういうメリットが生まれるかというとありきたりなところではテストのときにモックを使えるだとかの話になるわけです。どちらかというとモックを使えるというよりはモックでのテスト後にテスト完了したコードに手を入れる必要が無くなると言うのが大きなメリットだと思います。

Interfaceは変えれないので設計時の失敗の塗りつぶしには逆に使えませんし・・・。設定ファイルという気持ち悪さは確かにありますがこれはDIコンテナの設計しだいで違う手法もつかえます。

たとえば.NETなら

namespace Client.Process
{
    [ControlManagerEntry]
    class PartsAssignDocumentProcess : Client.LayerBase.UIProcessBase, Client.Interface.IPartsAssignDocumentProcess
    {
        //実装は省略
    }
}

見たいに属性をぶら下げておいてアセンブリを読みながらインタフェース<->実装のテーブルを起動時に生成するといった方法も使えます。(というか使ってます)

フレームワークの提供側としてみた場合に切り分け方でInterface依存を強制できるというのも見逃せないメリットです。

うまく伝わるかなぁ・・・。

投稿日時 : 2006年8月22日 19:34

コメント

# re: DIコンテナって? 2006/08/23 7:59 中博俊
Interface中心主義が肌に合わないんですよね。
そこが問題か(^^;;
Interfaceや基底クラスで抽象化できるかどうかによるんですよね・・・

# re: DIコンテナって? 2006/08/23 8:26 黒龍
>Interfaceや基底クラスで抽象化できるかどうかによるんですよね・・・

これも実装しだいなんですよね。new をDIコンテナに任せるというルール作りをしちゃうのもありかな~と。
本来はInterface<->実装クラスのマッピングだと思うのですが汎用的なファクトリとして使えるように属性の種類でクラス型やstringでの登録、取り出し、毎回newするのか、シングルトンかなどを登録できるようなDIコンテナにしておいてオブジェクトはDIコンテナから取るというルール作りでやってました。まぁやりすぎの感もありますが一例ということで^^;

# nlbESIgxjZEE 2011/12/27 18:35 http://www.hooksandlattice.com
Hello! How do you feel about young composers?!...

Post Feedback

タイトル
名前
Url:
コメント