Home - marmot-cn/marmot-framework GitHub Wiki

README

概述

信用体系框架是基于公司特定业务(信用体系网站)而设计的一套框架. 主要方向是应对客户私有云体系以及网络分层而设计区分:

  • 后端服务层
    • 提供业务
    • 提供SDK
    • 提供标准的RESTfulapplication/vnd.api+json模式接口
  • 前端服务层
    • 基于SDK和页面开发特定网站功能
  • 业务网关
    • 基于SDK开发特定业务数据接口
    • 接口以满足特定业务功能而开发

框架简介

该框架主要是基于DDD,CQRS,六边形模型的思路去架构.基于DDD领域驱动的微服务架构,我们可以更好的和用户方来分析项目需求(可以配合使用四色原型),大家可以使用通用的领域语言来讨论领域对象.使用composer做第三方package管理.

采取事件驱动模式开发:

Command -> CommandBus -> CommandHandler -> Event.

特点

更多是想把基于数据库编程(一个表单为一个对象,ORM模式)的思路,解耦为领域对象和存储层.数据库的表只是作为一个存储层来考虑.领域对象是我们通用讨论的对象. 你是不是也在开发中经常遇见如下问题:

  • 几乎没有使用过interface,abstracttrait.
  • 没有深入理解过什么是面向抽象.
  • 在日常开发中几乎很难真正使用上设计模式.
  • 无法构建脱离于数据库的单元测试.
  • 构建的model其实就是一张数据库表的映射, 没有任何业务逻辑, 只有一些对表的操作方法.
  • 针对MySQL的三星索引模式约束SQL语句的使用.
  • 针对接口实现HTTP模式的一些特性, 如
    • gzip
    • etag(前端自定义是否使用缓存)
    • ...
  • 在后端接口调用上重新封装实现并行接口请求.

难点

  • 没有固定开发模式, 在应用开发模式下只是大致遵循CQRS模式, 内部领域模型, 领域服务以及抽象层的制定都是遵循对面向对象的理解.
  • 需要理解SOLID原则重要.

DDD

简单来说DDD专注的是业务实现, 而不是技术实现本身. 推荐一些读物方便大家理解:

领域驱动设计 实现领域驱动设计

CQRS

其实这里我想关注的视角是Command模式, 我把所有对业务的动作都会提炼成一个命令来体现.

查询方面我们暂时实现的是使用ES, 来提供查询. 至于数据同步可以使用消息队列来实现, 我们目前使用的是RabbitMQ

cqrs

六边形模型

我么基于领域模型做核心封装, 适配器和不同的翻译器应对不同使用场景.

后续会有实际场景介绍

HexagonalArchitecture

checklist

  • 版本
    • 更新文档
    • 升级手册
  • Getting Started
    • 安装
    • 配置文件使用
    • 目录结构
      • 框架目录结构 not done
      • 应用目录结构
    • 文档
      • 项目字典
      • 控件规范
      • 错误规范
      • 接口文档
    • 一步开发网站 not done
    • 一步开发api not done @晓莉
    • 部署
      • 前端环境
      • 后端环境
      • 开发环境
      • 自动化
      • 容器镜像包
        • 数据卷容器
        • 数据卷容器slim
  • 代码设计
    • SOLID
      • 单一职责
      • 开放封闭
      • 依赖倒置
      • 里氏替换 not done
      • 接口隔离 not done
    • 设计模式
      • 模板模式
      • 策略模式
      • 命令模式
      • 工厂模式
      • 代理模式
      • 门面模式
      • 观察者模式
    • 六边形模型 not done
    • CQRS not done
  • 基本
    • 路由
      • 前端路由
      • 后端路由
    • 日志
    • 验证
  • 开发概念
    • 领域模型
    • 领域服务
    • 命令
    • 命令处理器
    • 翻译器(六边形模型)
    • 适配器
    • 仓库
    • 错误规范
    • 控件规范
    • 接口请求
    • Query
      • RowQuery
      • RowCacheQuery
      • FragmentCacheQuery
      • DataCacheQuery
    • Guzzle
      • 单条请求
      • 并行多条请求
      • 缓存
        • Etag
        • Period
  • 模板
    • smarty插件说明
      • widget
      • marmotencode
      • csrf not done
  • 样例代码
    • 前端服务层
      • 通用模式 not done
      • sdk模式
    • 后端服务层
  • 安全 not done
  • 测试 not done
    • 单元测试 not done

其他

  • 代码命名规范?