golang 项目目录组织

大漠狼道 · · 1046 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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 项目目录组织

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1046 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传