美文网首页
Golang MDSC 约定

Golang MDSC 约定

作者: 安德徐 | 来源:发表于2019-08-29 09:54 被阅读0次

    ModelCtrl是必须的,如果Ctrl方法要单元测试或复用则需抽象出Service
    有数据库操作可创建DAOModelDAOService使用单元测试,Ctrl使用RESTClient.http文件测试。

    分层结构

    • Model (模型)
      • 可以包含少量方法;
      • 不引用外部资源;
      • 功能:
        • 数据传输;
        • 持久化;
        • 字段校验;
        • jsonxml格式定义;
      • 如无必要,转换jsonxml格式时无需改变字段大小写,减少无谓的工作量;
    • DAO(数据操作接口)
      • 读写数据库
      • 可被ctrlservice调用;
      • 除数据库操作对象,不调用其他资源;
    • Service (服务)
      • 提供被多方使用的公共方法;
      • 名称以Service结尾;
      • 会被多个CtrlService调用;
      • 可创建、输入、输出Model
      • 可调用其他ServiceDAO
      • 不可调用Ctrl
      • 主要的单元测试对象,覆盖率要足够高;
      • 提供一个New方法创建服务,方法的参数是需要引用的其他服务;
      • 两个Service避免循环引用,如果无法避免,可赋值引用:
        func NewOneServer() *OneServer{
            return &OneServer{}
        }
        func NewTwoServer(os *OneServer) *TwoServer{
            ts := &TwoService{OS: os}
            os.TS = ts
            return ts
        }
        
    • Ctrl (控制器)
      • 对外提供WEB交互服务;
      • 名称以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 MDSC 约定

          本文链接:https://www.haomeiwen.com/subject/qysgsctx.html