2

IoC、インターフェイス、およびイベントを調整するのに非常に苦労しています。本を書かずにこれを説明できるか見てみましょう。

私はIoCを始めたばかりで、Springで遊んでいます。EF などよりもずっと前に構築された単純なデータ層があります。クラスの 1 つは、いくつかのメソッドとイベントを持つ DBProcedure です。

「実際の」DBProcedure クラスが実装する IDBProcedure インターフェイスを作成しました。TDD のやり方では、「実際の」DBProcedure クラスを、テスト用に同じインターフェイスを実装する別のクラスに交換できるようにしたいと考えています。私にとって、これは IDBProcedure インターフェースが私のデータレイヤーとは異なる名前空間/プロジェクトで定義されるべきであることを意味しますよね?

ただし、DBProcedure はいくつかのイベントを発生させることができ、それらのイベントはカスタム EventArgs 派生クラスを提供します。これは、EventArgs クラスもデータ層の外で定義する必要があるということですか? インターフェイスを機能させるためのように見えますが、データ層が広がるため、それは悪いように思えますか?

一方、私は間違った考えを持っているかもしれません.「実際の」クラスを使用していなくても、インターフェイスとイベントの定義を取得するためにテストしているときに、データ層の名前空間を含めても大丈夫ですか?

4

1 に答える 1

4

はい、インターフェイスモジュールを実装に依存させたくないので、インターフェイスとそれに依存するすべてのタイプをどこかに移動する必要があります。

このための一般的な選択は、2つの選択肢のうちの1つです。

Impl ----> Api <---- client

(実装はAPIに依存し、クライアントはAPIに依存し、APIモジュールのすべて)

Impl ----> Api <----- client
\           |          /
 \          V         /
  ------->Model<------

ここでは、誰もが共通の「モデル」モジュールに依存しており、これには列挙型などが含まれています。このバージョンの利点は、複数のAPIモジュールで同じ共通の列挙型やその他のアーティファクトを共有できることです。(通常、APIが他のAPIモジュールに依存することを本当に望まないため)

于 2009-02-05T17:43:27.247 に答える