golang 项目目录组织

app
  - cmd
    - cmd1
    - cmd2
  - cron
  - env
  - conf
    - conf_test.xxx
    - conf_prod.xxx
  - domain
  - facade
  - transport
    - http
    - grpc

domain就是各种业务逻辑
facade:facade模式,不同domain可能以组合模式对外提供服务,就在这层
transport:http服务还是grpc服务
=====
实践
=====
基于六边形架构,面向接口编程,所有的依赖和提供的服务都以接口形式提供,domain尽可能的pure,便于测试.
举个简单的例子:
订单系统:
创建订单服务:

Order.New
    // 创建订单
    // 持久化
    // 发送订单创新消息

持久化和发送消息可以用接口来处理,这样测试的时候,就可以通过mock这两个系统,而不用需要引入第三方组件,例如mysql,kafka等

对于domain,尽可能依照solid原则,最最最基本的是要满足s,单一原则,便于维护、分工等
而facade层,一种是先在router中快速实现,单发现有多个router都要用到同一组服务的时候,可以抽出一个公共的服务,放入facade层

参考
adapters-architecture
ddd上下文

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容