2009-07-04 5 views
4

アーキテクチャに初めてIoCコンテナを導入しようとしています。 は、IoCコンテナでとしてはならないものを探しています。私はIoCコンテナを使用することの落とし穴を避けたい。私はそれを悪用したり過度に使用したりしたくありません。IoCコンテナを使用するときに避けるべきことは何ですか?

IoCコンテナを使用する際に避けるべきことのリストを用意することができますか?

私はこれまでの私のリスト上のアイテムを持っている:

  • は(公共のシングルトンことはありません)すべてのクラスのアクセスにコンテナを聞かせてはいけません。コンテナにアクセスするトップレベルのクラスはごくわずかです。

答えて

2

あなたの場所でのIoCを入れている場合は、私はあなたがここにhttp://docs.codehaus.org/display/YAN/IoC+Container

を見てすることをお勧めいくつかの興味深い点は

  • 最も明白な一つであり、コンテナは、ビジネス・オブジェクトを必要とすべきではありません インターフェイスを実装するためにそれによって組み立てられ、任意のクラスを継承するために、 に任意のAPIを呼び出します。これにより、コンテナへの直接の依存性が回避されます。
  • コンテナは、「あなたはpublicコンストラクタを公開する を持っている」など、「あなたはJava Beanがセッターを公開する必要があり 」、任意の コーディング規則に準拠するために、ビジネス・オブジェクトを必要とすべきではない、 「あなたはメソッドを持っている必要があります のプログラマは、ビジネス・オブジェクトは、まだやるのといけないことからの 注意する必要があるため injectXXX」、 『あなたは特別な アノテーションを使用する必要がある』などのような制限 場所 コンテナの暗黙の依存関係のような名前 コンテナ。

  • IoCオブジェクト内のIoCコンテナAPI には依存しないでください。 IoCコンテナを使用してによってIoCの原則に違反することは悲劇である です。

  • IoCコンテナ はアセンブリオブジェクトのコードです ;システムの の設定用です。結局のところ、ビジネスオブジェクトのための ではありません。
  • 宣言型APIが望ましい手続き型コーディングを必要とするものではなく、宣言型APIを公開するのは良いことです。
+0

Amazedsaint:1 - どのIoCコンテナライブラリでクラスをいくつかの種類の規約に従わせる必要はありませんか?そして、あなたはどのようにあなたの "注入点"を見つけますか? 2 - 「宣言的APIが望ましい」という意味を説明できますか?別の種類のAPIを使用することの落とし穴は何ですか? – Sylvain

0

絶対に必要な場合を除き、タイプを登録するための設定ファイルは使用しないでください。リファクタリングが難しくなり、デフォルトの(モックではない)マッピングで単体テストすることも難しくなります。

+0

こんにちはNotDanは、デフォルトのマッピングで単体テストを行うのがなぜ難しいのですか? – Sylvain

+0

(少なくとも.NETで)テストプロジェクトの設定ファイルは、アプリケーション設定ファイル(MyApp.exe.configとMyTest.exe.config)とは異なります。実際に使用されるマッピングをテストしているわけではないので、あなたのテストがあなたのアプリが期待どおりに動くことを渡すだけであることを確信することはできません。 – NotDan

4

多分これはあなたが探しているアドバイスのようなものよりも、より単純化されますが、私の提案は、次のようになります。コンテナの上にハングアップされません。

IoCは容器の約1%であり、内部の成分は約99%である。一方、コンテナはインフラストラクチャの迷惑メールです)

アプリケーションにとって最も効果的な方法でこれらのコンポーネントを設計できるはずです。

良いコンテナと思われるものから始まり、コンテナAPIに大きく依存しない、よくカプセル化されたクリーンで自然なコンポーネントを作成するのに問題がなければ、正しい方向に向いています。

しかし、自分のデザインがコンテナに収まるようにフープを飛び越えていて、デザインに問題がないと思われる場合は、ただちにコンテナを見つけることができます。前進する。

希望すると便利です。

ニック

関連する問題