当我需要交织两个或三个库的功能时,我常常发现自己。这些复合函数以类似于库本身的方式使用。对此库组的调用大约有60%用于纯库,大约40%用于调用该化合物。所以这里有一个问题 - 如何更好地组织代码?下图说明了这个问题:
在OOP语言中,比如Java,我只是为此创建一个类。但是在Clojure中,一个专用命名空间看起来像是一种过度杀伤,尤其是它们可能有很多,并且复制粘贴这些复合调用只是闻起来。任何人都知道如何优雅地处理这种情况?
答案 0 :(得分:1)
通常情况下,您不应该根据他们所称的代码所在的位置来考虑您的功能,而应考虑他们所服务的目的。
当然,当您在命名空间中对功能类似的功能进行分组时,您可能会发现它们倾向于构建在lib1,lib2和lib3的函数之上,但是可能并非每个人都使用所有这些库,有些人可能会进一步使用lib4,有些人会在没有任何直接使用libN的情况下通过调用你自己以前编写的函数来构建;但是,只要您的命名空间保持其焦点,分组就是正确的。
另一方面,如果你将lib1,lib2和lib3用于两个不相关的目的(也许是因为这些库本身在多用途方面),那么在一个地方分组服务于那些不相关目的的函数是没有意义的(无论是否是命名空间)。
因此,只需将功能(宏等)保持在一起,以便在您自己的代码库中保持干净的设计。这是否会导致特定库的调用被组合在一起,这不是你应该关注的事情。