2010-11-21 11 views
2

私は長い間、疎結合コードを得るためにInterface/Inheritanceベースの多型を使ってアプリケーションを設計してきました。私が見る限りでは(これまでのところ)、DIフレームワーク/ IoCはこれをより簡単にするためのツールを提供しているにすぎませんが、抽象度のレベルが上がっているように見えます。Interface by IoC/DI

私が考えることができる唯一の理由は、大規模なチームが特定のDI/IoCフレームワークを既に知っていて、誰もが同じページにいる可能性があるということです。

私の見解では、DIはインターフェイスと同じデザインをしているようですが、それ以上のことがあると誰も私に説明できますか?DI/IoCフレームワークを使用する方が良い戦略ですか?

DI/IoCについて間違っていることを本当に願っています。

答えて

5
まず

、あなたはそこから欠落している点がthis required readingと編集を読み取ることができます...

あなたがDIコンテナを期待している場合)特別複雑な獣であるか、またはb)の全く新しい設計パラダイムは、私は数えますあなたは過激な考え方に近づく通常の防御的な方法で反応しています。

DI容器をあらゆる種類の方法で使用することに多くの労力を費やすことができますが、AOPなどと重複する多くのパワーがありますが、典型的なスイートスポットは、 「何かを理解する必要のあるすべてのチーム」とは何か「オーバーヘッド」(概念的なものか充実しているものか、後者の場合は実際のアプリケーションの影響を測定していますか?

これは理解しています: - 摩擦を減らし、多くの定型的なコードを取り除いたことによる摩擦の減少とクリーンな設計に焦点を当てた自由と集中(IOCのコンテナは、私にとって開発エコシステムの重要な部分です。彼らはここで2,しかやっていませんが、その影響は実際の(小さな)ビットと比例していません。

通常のインターフェイスベースのプログラミングと優れたデザインの原則とは異なるかどうかについては、私はそれらをより小さなもの、つまりSOLID principlesの1つを可能にするツールと見ています。

+1

おかげさまで、オーバーヘッドで私は概念的に意味がありますが、パーフェクトヒットは非常に小さいと認識していますが、一般的なアプリケーションドメインではごくわずかです。 - ところで、私は新しいプロジェクトでNinject(C#/ .Net)を使うことを検討しています。 – ocodo

+0

@slomojo:その場合、コンテナがコスト/便益を適切に分析せずに投げ捨てるようなあらゆる種類のトリッキーを使って[ab]に気をつけない限り、DIコンテナは新しいあなたのコードをより柔軟にするためのステートメント平均的な開発者が理解する必要があるのは、DIバインディングだけです。しかし、それでも多くのことをしても、システムのさまざまな領域にわたるカップリングについて意識的に考える必要はありません。 –

+1

@slomojo:@Mark Seemann(良いDIアドバイスが必要な場合は、ここで彼の最高評価の記事を読むことをお勧めします)はすぐに出てくる本を持っています(私は自分自身を楽しみにしています) - http:// manning .com /あなたに有益かもしれないシスタン。それは、一般的に(特定のコンテナの処理と共に)依存関係管理に関わるすべての微妙なパターンをカバーします。うまくいけば、他の人たちもいくつかの情報でチャイムします。 –

3

いいえ、DI/IoCはインターフェイスで設計するのと同じではありません。

DI/IoCエンジンは実際には大きなインスタンスファクトリです。それはあなた自身を書いて維持する必要からあなたを保存します。

メリットは、メンテナンスが少ない(書き込む必要はありません)と、より多くのユーザーがバグを見つけて報告することです。 DI/IoCエンジンを作成したチームがあなたとチームよりも優れている場合は、より高品質のソフトウェアを使用することになります。自社のソリューションよりも広範に流通しているソリューションを選択すると、外部の人が幅広く利用できる書籍を読む方法を知る機会があります。チームのメンバーは、よく知られているフレームワークを知り、経験を積むことで、レジュームを強化します。

私はあなたにインターフェイスを設計し続けることをお勧めしますが、それ以上のDIはあります。