【问题标题】:Is creating a module with interfaces only a good idea?创建带有接口的模块只是一个好主意吗?
【发布时间】:2017-01-07 00:43:29
【问题描述】:

在我看来,创建一个只有接口的模块(包、包等)似乎是一个奇怪的想法。但是,我不知道解决以下架构要求的其他最佳解决方案。

通常需要一组实用程序。在许多项目中,我可以看到“utils”文件夹的创建,甚至是一个带有常用包的单独包(模块)。

现在考虑一下您不想依赖具体的 utils 集的想法。因此,您可以使用接口。

因此,您可以创建具有多个模块的整个项目,仅依赖于“Utils-Interfaces”集,这可能是一个单独的模块。然后你认为你可以在其他项目中重复使用它,因为这些工具经常被使用。

那你是做什么的?创建一个单独的模块(包,包......),其接口定义了具体实用程序类要实现的方法?并在您的各种其他项目中重新使用这个“胶水接口包”(可能与其他“胶水”,如桥梁、提供者等)?或者有没有更好的方法来设计可以轻松从一个到另一个的实用程序的架构?

【问题讨论】:

    标签: oop module architecture


    【解决方案1】:

    为实用方法提供接口似乎有点奇怪,因为应该清楚它们的作用。同样在大多数语言中,您将不再有静态调度。而且你不会通过为实用方法提供接口来解决问题。我认为如果尚未实现此类功能,则寻找做同样事情的库或编写自己的库会更有意义。不过,非常具体的事情应该与项目联系起来。


    让我们看一个Java的例子:

    public static boolean isDigitOnly(String text) {
        return "\\d+".matches(text);
    }
    

    假设我们会使用一个接口。这意味着你必须有这样一个实现的实例,很可能是一个单例。那有什么意义呢?你会写两次方法头,你没有任何优势;接口用于松散耦合,但此类通用实用程序方法不绑定到您的应用程序。

    所以也许你只是想使用一个库。实际上有一个正是这个用例:Apache Commons。当然,您可能不想为单个方法包含这么大的库。但是,如果您需要这么多实用方法,您可能需要使用它。


    现在我已经解释了如何使用和重用实用方法;但是,您的部分问题是关于使用不同的实现。

    我看不到很多你想要这个的案例。例如,如果您有一个特定于某个套接字实现的方法,您可能想要

    A) 实用方法作为 API 的一部分 B) 用于不同套接字实现的接口,在该接口上您有一个通用的实用方法

    如果您不能将此应用于您的问题,它可能不是实用方法,或者我没有考虑过。如果您能向我提供更具体的问题,我很乐意为您提供更具体的答案。

    【讨论】:

    • 好吧,你是对的。如果 util 实现方式是特定的,那么应用程序本身应该有这样的要求,即应用程序无论如何都依赖于它,因为结果应该是可预测的(相同的,不管实现方式)。感谢您清除此问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    相关资源
    最近更新 更多