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层