Golang MSC 约定

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

分层结构

  • Model (模型)
    • 可以包含少量方法;
    • 不引用外部资源;
    • 功能:
      • 数据传输;
      • 持久话;
      • 校验信息;
      • jsonxml转换格式定义;
    • 如无必要,转换jsonxml格式时无需改变字段大小写,减少无谓的工作量;
  • Service (服务)
    • 提供被多方使用的公共方法;
    • 名称以Service结尾;
    • 会被多个CtrlService调用;
    • 可创建、输入、输出Model
    • 可调用其他Service
    • 不可调用Ctrl
    • 主要的单元测试对象,覆盖率要足够高;
    • 提供一个New方法创建服务,方法的参数是需要引用的其他服务;
  • Ctrl (控制器)
    • 对外提供交互服务;
    • 名称以Ctrl结尾;
    • 包含一个路由方法(Party),说明RESTful调用名称、路径、模式参数等;
    • Ctrl不能被ModelService调用;
    • Ctrl可以调用其他Ctrl,但只能用于路由分发;
    • 为每个Ctrl都提供同名的http测试文件;
    • 提供一个New方法创建控制器,方法的参数是需要引用的服务;

Ctrl & RESTful

  • Ctrl包含一个路由方法(Party);
  • 路由指定的执行方法使用模式开头(getpostputpatchdelete);
  • 避免多级路径,使用扁平结构,这样更灵活方便管理和重构:
    • 错误:GET /trades/32/orders/5/items/1
    • 正确: GET /items/1?trade=32&order=5
  • 模式定义:
    • get 查询、统计、列表等,无信息被修改;
    • post 创建、增加,主数据总量增长;
    • put 编辑、修改,主体信息被改变,总量不变但可能会变成另外一个实体;
    • patch 状态变更、执行命令,局部信息修改,主体未大改变被加工微调;
    • delete 删除、作废,失效不再关注;
  • get 无主键是列表,有主键是根据主键查询单条记录
  • get 有路径参数,是根据路径参数统计、分析;
  • patch 主键写在路径上,参数放在params中:
    • PATCH /trades/32/send?express=SF
    • PATCH /trades/32/confirm?mode=phone
  • patch 信息可以是结构化的
    PATCH /trades/32/tags
    content-type: application/json
    
    [1,3]
    

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:安德徐

查看原文:Golang MSC 约定

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

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