[讨论]如何进行Golang的Clean Architecture编程

Clean Architecture是Robert C. Martin提出的一种业务领域分层的方法论,简单版本可以参考下博文。这种方法论在很多领域中都有落地实现,比如JavaPHPAndroidiOS

那么问题来了,在Go语言中,如何落地Clean Architecture方法呢?如何划分领域层次,如何在不同层次之间进行通讯?interface在过程中如何使用呢?

欢迎大家讨论和提供自己的落地经验。

已邀请:

astaxie - 创造、获取、分享、传播和应用Go

赞同来自: haoc7

You can look for a sample project here https://github.com/bxcodec/go-clean-arch, a sample CRUD management article.

https://hackernoon.com/golang-clean-archithecture-efd6d7c43047

Xargin

赞同来自: haoc7

读他的书的时候我还写了两篇读书笔记:

http://xargin.com/clean-architecture-1/

http://xargin.com/clean-architecture-2/

感觉翻来覆去就是分层和 interface 做控制反转。只是拿 interface 来做解耦的话,其实不同的语言都差不多。

Uncle Bob 书里的例子反复地在说自己当初做 wiki 的例子,怎么样 leave your options open。但感觉也不能全信。我可不信现在的公司有不用 dbms 来做持久化的。况且真的像他那样慢慢悠悠地从文件系统存储开始干起,第二天五十倍的流量大概就把公司冲击倒闭了2333

另外,interface 多了以后对用 vscode 的程序员是噩梦哦~

另外+1,哪怕是每两层之间都插一层 interface,也比一大堆继承(go里就是组合了)来做逻辑重用要好得多。

另外+2,这本书本身还是不错的~

taowen

赞同来自:

clean architecture 就是把满足功能性需求和满足非功能性需求的代码分离开来。满足非功能性需求的代码一般指这些:

  • 网络通信方式
  • 按不同格式编解码
  • 提高稳定性的代码:负载均衡,熔断,故障摘除
  • 特定的GUI技术的API
  • 各种提供observability的方式

interface是隔离具体实现的一种方式。也可以用func来表示同样的接口契约,但是赋予不同的实现。

要回复问题请先登录注册