我有一堆小服务,它们共享一些常见的包,例如Logger
, Configuration
and Net
。我在单独的项目中编写了每个包。
问题是我的Logger
需求包Configuration
用于设置。和我的Configuration
(not仅由Logger
)想要在必要时写入输出日志。
因此,我有循环依赖缺陷Logger
-->Configuration
, Configuration
-->Logger
.
我该如何重新设计这段代码?
今年的 GopherCon 上出现了类似的情况,Edward Muller 认为配置结构会增加应用程序中的耦合。配置包只是这个的一个极端版本。他认为,依赖关系应该只接受它实际需要的配置位,而不是整个结构(或本例中的包)。您可以在这里看到他演讲的这一部分:
https://www.youtube.com/watch?v=ltqV6pDKZD8 https://www.youtube.com/watch?v=ltqV6pDKZD8
或者这里有文本版本:
https://about.sourcegraph.com/go/idiomatic-go/#config-structs https://about.sourcegraph.com/go/idiomatic-go/#config-structs
他的解决方案的本质是让你主要做类似的事情:
logSetting1 := configuration.GetLogSetting1()
logSetting2 := configuration.GetLogSetting2()
logger.SetSettings(logSetting1, logSetting2)
如果您的记录器需要配置中的一些设置才能初始化自身,您可能还会遇到“首先创建什么”的问题。我通过创建具有合理默认值的记录器、使用默认记录器创建配置对象,然后根据加载的配置调整记录器来避免这种情况。这意味着您暂时拥有一个未正确配置的记录器,但only你用它做的事情就是用它来记录配置的加载。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)