2

我很难协调 IoC、接口和事件。让我们看看我是否可以在不写书的情况下解释这一点。

我刚刚开始使用 IoC,我正在玩 Spring。我们有一个简单的数据层,它早在 EF 或其他人之前就已构建。其中一个类是具有一些方法和事件的 DBProcedure。

我创建了一个“真正的” DBProcedure 类实现的 IDBProcedure 接口。在 TDD 方式中,我希望能够将“真正的” DBProcedure 类换成另一个实现相同接口的测试类。对我来说,这意味着 IDBProcedure 接口应该定义在与我的数据层不同的命名空间/项目中,对吗?

但是 DBProcedure 可以引发一些事件,并且这些事件提供自定义 EventArgs 派生类。这是否意味着 EventArgs 类也需要在数据层之外定义?似乎它可以使界面工作,但这似乎很糟糕,因为它传播了数据层?

另一方面,也许我有错误的想法——即使我没有使用任何“真实”类,在我测试获取接口和事件定义时是否可以包含数据层命名空间?

4

1 回答 1

4

是的,您需要将接口及其依赖的所有类型移动到某处,因为您希望接口模块依赖于实现。

对此的典型选择是两种选择之一

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

(实现依赖于api,客户端依赖于api,api模块中的一切)

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

在这里,每个人都依赖于一个通用的“模型”模块,其中包含枚举等。此版本的优点是您可以让多个 API 模块共享相同的公共枚举和其他工件。(因为你真的不希望 API 通常依赖于其他 API 模块)

于 2009-02-05T17:43:27.247 回答