如果只有一个类实现它,那么接口是否有任何意义?

时间:2010-05-18 01:53:24

标签: refactoring interface class-design

在我的新工作中查看(成熟)代码库,有一个接口,只有一个类实现它(据我所知)。可以/我应该摆脱界面吗?

8 个答案:

答案 0 :(得分:8)

没办法!它没有任何有害影响,有一天有人可以交换实现而无需重构大量代码。

答案 1 :(得分:4)

除了已经提供的好答案之外 - 如果在将来的某个时刻某个类需要被模拟用于测试目的,那么当已经有可用的界面时,这样做会容易得多!

答案 2 :(得分:3)

今天没有。从现在起六个月后,该项目的复杂性增加了十倍?谁知道。对于您的观点,如果这是遗留代码,那么实现一次的接口几乎没有价值,但是删除它所涉及的重构也没有意义。 “如果有效,请不要修复它。”

答案 3 :(得分:2)

既然你提到了一个成熟的基础,我想提一下另一个现实世界的例子:Hibernate的Session。

Session是仅由一个类实现的接口:SessionImpl。但是,如果您以前使用过hibernate,或者阅读其源代码,您可能已经注意到Session的使用方式,而不是SessionImpl。

这是错误的设计吗?绝对没有。它被称为“替代原则”,或“面向接口的编程”。这意味着通过使用接口而不是实现,您可以毫不费力地扩展代码,只需相应地实例化新类,但始终使用接口。如果没有人创建一个实现Session的新类,它仍然是错的吗?不,还没错。

我的两分钱。

答案 4 :(得分:1)

我想说这取决于,但在大多数情况下,界面对某些类来说是一个好主意。使用接口可以更轻松地进行模拟,当您使用IoC容器时,接口开始变得非常有意义,尤其是当您开始实现跨容器共享的服务时。然后,您就可以将服务的实现与需要该服务的类分离。

答案 5 :(得分:0)

是的,接口有一个重点,因为未来可能会有多个实现。你当然可以在这里过关注并为所有东西创建接口,这样就可以找到平衡点。

答案 6 :(得分:0)

除了在其他答案中给出的原因之外,仅实现接口允许通过在不使用检测的情况下构建代理来拦截方法。这用于记录,封装事务中的操作等。它由几个框架使用。

答案 7 :(得分:-1)

即使人们对每1000行代码中的错误数量不太满意,但这两者似乎相关(https://stackoverflow.com/questions/862277/what-is-the-industry-standard-for-bugs-per-1000-lines-of-code)。减少行数==减少错误。

此外,更改接口名称的实现名称应该是这里要做的全部。

如果重构工作量很小并且减少了代码,那么我将更倾向于抑制接口。