构造Clojure源代码的惯用方法
我对人们如何构造Clojure源代码感兴趣 对于Java,我非常熟悉每个源代码文件一个类的范例,将所有数据和方法定义与适当的注释和注释捆绑在一起 然而Clojure提供了更多的灵活性,我不确定我应该如何组织我的项目(可能最终成为一个中等规模的应用程序,可能有5000行,带有三个或四个不同的子系统) 特别是,我正在努力解决:构造Clojure源代码的惯用方法,clojure,code-structure,Clojure,Code Structure,我对人们如何构造Clojure源代码感兴趣 对于Java,我非常熟悉每个源代码文件一个类的范例,将所有数据和方法定义与适当的注释和注释捆绑在一起 然而Clojure提供了更多的灵活性,我不确定我应该如何组织我的项目(可能最终成为一个中等规模的应用程序,可能有5000行,带有三个或四个不同的子系统) 特别是,我正在努力解决: 我应该使用什么准则来确定代码是否应该在单个名称空间中,还是应该分离到不同的名称空间中 每个协议/数据类型是否应该有自己的名称空间+带有相关函数集的源文件 我什么时候需要vs
- 我应该使用什么准则来确定代码是否应该在单个名称空间中,还是应该分离到不同的名称空间中
- 每个协议/数据类型是否应该有自己的名称空间+带有相关函数集的源文件
- 我什么时候需要vs.使用其他名称空间
- 我认为名称空间是一个语义单元,它是为特定目的而组合在一起的代码,比如数据类型及其操作李>
- 对于适合一个文件的较小单元(我使用~1000行作为文件拆分的限制),每个文件有一个名称空间,目录路径加文件名与名称空间相同。这在Java中是一件好事,我认为,它使从文件中查找名称空间或从文件中查找名称空间变得轻而易举李>
- 对于需要几个文件的较大单元,我使用Go约定:名称空间与目录路径匹配,目录中的所有文件共享同一名称空间。在这些情况下,我通常分配一个具有固定名称(“main”)的主文件,以加载其他文件并与之交互李>
- 几乎所有地方都需要使用适当短的别名
- 这还允许重用核心名称:我的专用树数据类型具有操作“get”以适应映射;使用require没有冲突:“get”是Clojure核心get,“tree/get”是我的数据类型李> 我只在我认为的“核心扩展”中使用“使用”,就像当我制作自己的“地图IF”时,它是地图和过滤器滚动成一个。