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上下文

你可能感兴趣的:(golang 项目目录组织)