在我的新工作中查看(成熟)代码库,有一个接口,只有一个类实现它(据我所知)。可以/我应该摆脱界面吗?
答案 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)。减少行数==减少错误。
此外,更改接口名称的实现名称应该是这里要做的全部。
如果重构工作量很小并且减少了代码,那么我将更倾向于抑制接口。