创建一个带接口的模块只是一个好主意吗?

时间:2017-01-06 16:08:23

标签: oop module architecture

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

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

现在考虑一下你不想依赖于具体的utils集的想法。相反,您使用接口。

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

那你做什么?创建一个单独的模块(包,bundle ...),其接口包含要由具体实用程序类实现的方法的定义?并在您的各种其他项目中重复使用这种“胶水接口包”(可能与其他“胶水”,如桥梁,供应商等)?或者,有没有更好的方法来设计关于可以轻松地从一个工具切换到另一个工具的工具?

1 个答案:

答案 0 :(得分:1)

拥有实用程序方法的接口似乎有点奇怪,因为它应该清楚它们的作用。同样在大多数语言中,你不再拥有静态调度。并且你不会通过使用实用程序方法的接口来解决问题。我认为,如果这样的功能尚未实现,那么寻找一个做同样事情的图书馆或编写自己的图书馆会更有意义。但是,非常具体的事情应该与项目联系在一起。

让我们看一下Java中的一个例子:

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

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

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

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

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

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

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