9

依存性注入では、抽象化に対してプログラムします。

私の経験から、アプリケーションのほとんどの抽象化は、それらの実装と1:1の関係にあると言えます。これは、再利用された抽象化の原則に違反しています。

Mark Seemanは、彼の投稿のいくつかで、 RAP違反を回避するために抽象化にNull Object Implementationを使用できることを提案しました(Mark Seemanからのこの提案は、私の推論である可能性があります。これについてMarkを引用するのが間違っている場合は、訂正してください)。ここでの私の質問はです。

  1. ヌルオブジェクトの実装方法は?
  2. RAPに違反しても大丈夫ですか?
4

1 に答える 1

16

個人的には、本番環境の実装が1つしかない場合でも、抽象化にプログラムするのが便利だと思います。特に:

  • 本番環境の実装が1つしかない場合でも、本格的な偽物や動的に作成されたモックなど、他の実装がテストに含まれている可能性があります。
  • 多くの場合、具象クラスに依存するよりも、依存関係をより明確に表現できます。たとえば、具象クラスは、さまざまな理由で、依存していない他のパブリックメンバーを公開する場合があります。

念のために言っておきますが、これは最初から誤った記述です。

依存性注入では、抽象化に対してプログラムします。

具象クラスで依存性注入を完全に簡単に使用できます。依存関係のインターフェースを作成する必要があることは言うまでもありません。依存性注入は、クラスが依存性を表現するために使用する抽象化のレベルではなく、依存性を取得する方法に関するものです。

だから基本的に:

  • 本番環境の実装が1つしかない場合でも、抽象化を実装するための「テストダブル」の重要性を過小評価しないでください。
  • 本当に必要な場合は、具体的な実装に依存することを恐れないでください。ただし、その依存関係を注入することは、実際には「適切な」依存関係であるクラス内で作成するよりもクリーンです。
  • すべてを注入しようとしないでください。依存関係の動作が実際には相互作用ではない場合は、注入したくない場合があります。たとえば、インスタンスの作成を避けるためだけに「コレクションプロバイダー」の注入を開始しないでください。たとえば、テスト目的でList<T>クラスをの動作から分離する必要はありません。List<T>
于 2012-06-05T09:28:54.473 に答える