Clojure - 组件和名称
Clojure - component and names
我正在尝试理解 Stuart Sierra 的 component
,特别是组件的命名约定,以便构建 Clojure 应用程序。
例如,如果我查看 system
,我会看到几个组件映射到 :server
键:
因为两者使用相同的密钥:server
,是否意味着如果我使用这个库,我只能使用其中一个?
同样,我使用onyx
。 onyx system.clj
中已经定义了几个组件。
这是否意味着 onyx
有效地保留了某些密钥?
:port
这个参数,好像野外很多组件都在用,会怎么样?
问题
- 启动方法中
assoc
ing 中使用的键与 component/system-map
中使用的键有什么区别?
- 这些键是否有命名约定,我们如何避免这些键之间的冲突?
- 在哪些情况下(如果有的话)拥有多个系统是否有意义,它们可以同时 运行 吗?
系统映射中的键标识该系统中的特定组件(实例)。您可以使用您喜欢的任何键来访问您需要的任何组件。
特定组件记录中的键可以是以下三种之一:
- 创建时设置的配置值
- 一些与组件用户无关的内部值
- 一个依赖(系统启动时会引用另一个组件)
1和2一般由组件构造函数设置,用户不需要关心记录中实际使用的key。
通过在依赖组件上设置从依赖项键 (3) 到系统映射中引用依赖项组件的键的映射来配置依赖项。这是通过 component/using
函数完成的,并将组件键映射到系统映射键作为第二个参数。这样您就可以始终将任何预期的密钥映射到任何实际使用的密钥。您可以将 component/using
的简写形式与键向量一起使用,但前提是系统映射中的键与您正在配置的组件中的键相同。
我希望能回答前两个问题
第三个问题,我想我想看看你正在寻找的一个单独的例子 post
最后一个问题:是的,您可以同时拥有多个系统运行。根据您想做什么,这可能有意义也可能没有意义,但是 运行 测试系统和开发系统似乎是一个相当明显的设置。
我正在尝试理解 Stuart Sierra 的 component
,特别是组件的命名约定,以便构建 Clojure 应用程序。
例如,如果我查看 system
,我会看到几个组件映射到 :server
键:
因为两者使用相同的密钥:server
,是否意味着如果我使用这个库,我只能使用其中一个?
同样,我使用onyx
。 onyx system.clj
中已经定义了几个组件。
这是否意味着 onyx
有效地保留了某些密钥?
:port
这个参数,好像野外很多组件都在用,会怎么样?
问题
- 启动方法中
assoc
ing 中使用的键与component/system-map
中使用的键有什么区别? - 这些键是否有命名约定,我们如何避免这些键之间的冲突?
- 在哪些情况下(如果有的话)拥有多个系统是否有意义,它们可以同时 运行 吗?
系统映射中的键标识该系统中的特定组件(实例)。您可以使用您喜欢的任何键来访问您需要的任何组件。
特定组件记录中的键可以是以下三种之一:
- 创建时设置的配置值
- 一些与组件用户无关的内部值
- 一个依赖(系统启动时会引用另一个组件)
1和2一般由组件构造函数设置,用户不需要关心记录中实际使用的key。
通过在依赖组件上设置从依赖项键 (3) 到系统映射中引用依赖项组件的键的映射来配置依赖项。这是通过 component/using
函数完成的,并将组件键映射到系统映射键作为第二个参数。这样您就可以始终将任何预期的密钥映射到任何实际使用的密钥。您可以将 component/using
的简写形式与键向量一起使用,但前提是系统映射中的键与您正在配置的组件中的键相同。
我希望能回答前两个问题
第三个问题,我想我想看看你正在寻找的一个单独的例子 post
最后一个问题:是的,您可以同时拥有多个系统运行。根据您想做什么,这可能有意义也可能没有意义,但是 运行 测试系统和开发系统似乎是一个相当明显的设置。