1

我经常发现自己处于需要将两个或三个库的功能交织在一起的情况。这些复合函数的使用方式类似于库本身。对该库组的大约 60% 的调用转到纯库,大约 40% 的调用转到化合物。那么问题来了——如何更好地组织代码?下图说明了这个问题:

图表

在 OOP 语言中,比如 Java,我会简单地为此创建一个类。但是在 Clojure 中,一个专用的命名空间看起来有点矫枉过正,尤其是它们可能有很多,并且复制粘贴这些复合调用只是一种气味。任何人都知道如何优雅地处理这种情况?

4

1 回答 1

1

通常,您不应该根据它们调用的代码所在的位置来考虑您的函数,而应该考虑它们所服务的目的。

当然,当您在命名空间中对具有类似目的的函数进行分组时,您可能会发现它们往往构建在 lib1、lib2 和 lib3 的函数之上,但也许不是每个人都使用所有这些库,有些人可能会进一步使用 lib4 并且通过调用您自己以前编写的函数,将在不直接使用 libN 的情况下构建一些;不过,只要您的命名空间保持其焦点,分组就是正确的。

另一方面,如果您将 lib1、lib2 和 lib3 用于两个不相关的目的(可能是因为这些库本身在某种程度上是多用途的),那么将用于这些不相关目的的函数分组在一个地方是没有意义的(无论是命名空间与否)。

因此,只需将用于类似目的的函数(宏等)保持在一起,以在您自己的代码库中保持简洁的设计。这是否会导致对特定库的调用被组合在一起,这不是您应该关心的事情。

于 2013-06-14T22:32:00.707 回答