【问题标题】:Do I need an interface if there is just one implementation? [duplicate]如果只有一个实现,我需要一个接口吗? [复制]
【发布时间】:2015-12-19 19:18:43
【问题描述】:

我从事 OOP 已经有一段时间了,几天前与同事发生争执后,我对接口的用法感到困惑。

基本上,我在应用设计模式时一直在使用接口,尤其是当有多个类实现公共特性时。

在我的应用程序中,有 Hibernate 层和少数服务类,例如 UserServiceCompanyService 等。 问题是我们是否也为每个服务类保留单独的接口。如UserServiceContractCompanyContract等。

我的同事的论点是,没有必要有接口。

我在本教程中也遇到过,作者使用了接口。但是没有一个通用接口只实现几个类一次。 example interface implentation

在这种情况下使用接口的好处是,它改进了代码结构。是的,有 IDE 功能可以显示类可用的方法。但是,我仍然想让你们的想法也了解这一点。

【问题讨论】:

    标签: oop design-patterns interface


    【解决方案1】:

    当您谈论设计模式和最佳编码实践时,需要不是您应该问自己的。你不需要你做的大部分事情,至少不需要马上。当然,在您真正这样做之前,您不知道是否需要对该合约进行不同的实现。所以这不是你现在需要什么的问题。这是一个你以后希望自己拥有什么的问题。

    您在发布的链接中看到的是 SOLID 中的 DDependency Inversion Principle

    依赖于抽象,而不是实现。

    你知道,你比后悔更安全。

    编辑:另外,我建议不要为接口(或前缀)添加后缀。如果您将使用接口而不是实现,请使接口的名称干净。在您的情况下,一个常见的选择是,UserService 用于接口,UserServiceImpl 用于实现。

    【讨论】:

    • +1 表示“您希望以后拥有”。只想提一下,接口使您能够将组件彼此隔离,这为您对代码进行单元测试提供了很好的优势
    • 好的,所以,当我启动 Userservice 类时,如果我有接口会更好。但是我已经完成了这个项目,但我认为没有必要回去创建接口。对吗?
    • 没有一个项目完成过,真的。我的建议是,如果您决定使用 DIP 方法,越早越好。稍后,进行必要的调整将变得更加困难。
    • 补充一点,在你需要之前,我会避免使用抽象工厂模式。我发现这是 GOF(四人组)模式中绝对最难学习和教授的模式之一(我已经花了 小时 教博士研究生)。并且编辑器(至少是 Eclipse,我认为 IDEA 和 Android Studio)在您使用该模式时会变得很困难,因为当您“只是使用接口”。 (即使你只有 1 个 impl)
    • 感谢大家的详细回复。
    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2012-01-18
    • 2013-07-03
    • 2011-11-10
    • 1970-01-01
    相关资源
    最近更新 更多