我在一个 Java Web 应用程序上工作,它使用 Spring 进行依赖注入,使用 JMock 在我们的单元测试中模拟这些依赖项。
目前,我们的团队在如何命名我们使用的某些接口方面有一些不同的意见。我们对域中具有多个实现的接口命名没有问题,这很简单。但是,当涉及到我们只有一个实现并且打算在未来只有一个实现的接口时,我们遇到了障碍。
我们有这样的接口纯粹是为了模拟,例如,我们有服务和存储库,我们在单元测试中模拟出来,这些服务将被命名为“DocumentMappingService”或存储库“EmployeeRepository”。目前有些人只是在关联的接口名称前加上一个“I”,即“IDocumentMappingService”和“IEmployeeRepository”。其他人像我上面那样命名接口,然后在实现类的接口名称后附加一个“Impl”。
第三个“派系”觉得这两个选项都很差。查看著名的“Growing object-oriented software,guided by testing”等文献会让人相信前面提到的两个选项都很糟糕,接口名称应该清楚地定义契约和实现类名称应明确说明该合同是如何实施的。不过,在我上面提到的情况下,我们发现这很难做到。
我希望那里有人以前遇到过类似的问题,并对哪个选项最好以及为什么有一些建议。此外,如果您认为“I”和“Impl”选项都很差,那么请提出一个具体的替代约定。