你可能会问,为什么要使用另一个函数来格式化article,而不是在article实体上添加JSON标记?
这是个非常重要的问题 。在article实体上添加JSON标记意味着article知道它是如何格式化的 。虽然没有显式导入到HTTP,但打破了抽象,使实体包依赖于传输层 。
例如,假设你想将对客户端的响应从"title"更改为"header",此更改仅涉及传输层 。但是,如果此需求导致需要更改实体 , 则意味着该实体依赖于传输层,这就破坏了简洁架构原则 。
我们看看这个简单应用的依赖关系图:

文章插图
哇,你一定注意到了它们的相似性!article实体没有依赖关系(只有向内箭头) 。外层,transport和inmem , 只有指向BL和实体内层的箭头 。
一切都和转换有关跨界就是不同层次语言之间的转换 。
BL层只使用应用语言 , 也就是说,只知道实体(没有HTTP请求或SQL查询) 。为了跨越边界 , 流中的某个组件必须将应用语言转换为外层语言 。
在传输层,有解码器(将HTTP请求转换为RequestModel的应用语言)和编码器(将应用语言ResponseModel转换为HTTP响应) 。
数据层实现了repo , 在我们的例子中是inmem 。在另一种情况下 , 我们可能会让sql包负责将应用语言转换为SQL语言(查询和原始结果) 。
"ing"包你可能会说传输和服务不应该在同一个包中,因为它们位于不同的层,这是一个正确的论点 。我从go-kit的shipping例子中取了一个例子,含有这种设计,ing包包含了传输/端点/服务 , 我发现从长远来看非常方便 。话虽如此 , 如果我现在写的话,可能会用不同的包 。
最后关于"尖叫架构(Screaming Architecture)"的一句话Go非常适合简洁架构的另一个原因是包的命名及其思想 。尖叫架构(Screaming Architecture) 和构建应用程序有关,以便应用程序的意图显而易见 。在Ruby On Rails中 , 当查看结构时,就知道它是用Ruby On Rails框架编写的(控制器、模型、视图……) 。在我们的应用程序中 , 当查看结构时,可以看出这是一个关于文章的应用程序,有发布用例,并使用inmem数据层 。
总结简洁架构只是一种方法,并不会告诉你如何构建源代码,其实现艺术在于了解所用语言的使用惯例和工具 。希望这篇文章对你有所帮助,重要的是要意识到,那些争论设计问题解决方案的文章并不总是对的,当然也包括这篇
【基于Go-Kit的Golang整洁架构实践】
推荐阅读
- Graalvm 替代 JVM 真的可以带来巨大的性能优势吗?
- 机器学习模型性能的十个指标
- 容器的“边缘”
- 分析企业网站seo思维可以千变万化,不变的是网站seo优化基础
- 搜索引擎优化关键词定位及快速参与排名的技巧解析
- 黄焖鸭和黄金蛋的家常做法,简单易学味道棒,孩子抢着吃
- 滑雪的尽头是骨科?安全指南来了
- 泡完土豆丝的水,一滴也别倒,能解决很多男人女人的烦恼,涨知识
- 不建议买的5个羽绒服品牌,听着上档次,实际都是智商税!太坑人
- 狗的寿命是多少年?为何狗临死前都会离家出走?它们在害怕什么?
