开发架构设计阶段,实际上是一个由细到粗,归纳与抽象的过程。首先通过整理归纳出各个模块的技术共性,都有哪些共性的需求,共性的设计,共性的技术架构。然后通过这些归纳,从全局角度去思考整个软件的顶层架构,像决策者一样去决策整个系统的技术架构。
开发架构设计阶段,架构师主要完成以下几项工作:
- 系统规划
- 接口定义
- 系统分层
- 技术选型
- 代码规范
技术中台建设
“大前端+技术中台”是再开发团队中有一个强大的架构支持团队,他们通过架构强大的技术中台,将软件开发中的许多技术架构封装在平台中,其他各个开发软对就基于此技术中台进行业务开发。 技术中台的特征:
- 简单易用,快速便捷
- 易于技术架构演化
- 支持领域驱动与微服务的技术架构
增删改查的技术架构
命令与查询职责分离(CQRS)是软件大师Martin Fowler提出的一种架构设计模式。该模式将系统按照职责划分为命令与查询两部分。所有命令部分的增删改操作都应采用领域驱动设计的思想进行软件设计,从而更好的应对大规模负责应用;所有的查询功能则不适用领域驱动设计,而是采用事务脚本模式,即直接通过SQL语句进行查询。
增删改采用单Controller,单Dao的架构设计:
单Controller的设计流程:
- 根据前端参数bean,从Spring中获得Service
- 根据前端的参数method,通过反射获得调用的方法
- 通过反射获取调用犯法的第一个参数作为值对象
- 通过反射创建值对象,根据反射获取值对象的所有属性,从前端JSON中获得对应属性的之,写入值对象
- 根据前端JSON获得其他参数
- 值对象与其他参数使用反射调用service的method
单Dao的流程设计:
- 单Dao调用VObjFactory.getVObj(class)获得配置信息vObj
- 根据vObj.getTable()获得对应的表名
- 通过prop.getColumn()获得值对象对应的字段
- 运用反射从值对象中获得所有属性及其对应的值
- 通过以上参数形成SQL语句
- 通过SQL语句执行数据库操作
查询功能的架构设计
查询部分的单Controller的流程设计:
- 从前端获取bean,page,size,count及其查询的参数
- 根据bean从spring中获得相应的service
- 从前端获得查询参数JSON,将其转换为Map
- 执行service.query(map)
- 执行完查询后,以不同形式返回给前端
单service的设计流程:
- 将查询参数Map,page,size参数传递给DAO,执行查询dao.query(map)
- 在查询的前后增加空方法beforeQuery(), afterQuery()作为钩子,当某业务需要查询前后进行处理时,通过重载子类去实现
- 判断前端是否传递了count,如果有,调用dao.count()求和计算
- 将数据打包成ResultSet对象返回
支持领域驱动的架构设计
基于微服务的架构设计
支持DDD与微服务的技术中台应当具备以下几方面的能力:
- 能解决当前微服务架构的技术不确定性,可以更低的成本应对日后技术架构的更迭
- 更容易将领域驱动设计应对到微服务架构中,包括领域建模,限界上下文的微服务拆分,事件通知机制等
- 能够实现微服务间的数据装配,以便通过仓库与工厂装配领域对象的过程中将本地查询替换为远程接口调用
微服务架构设计最大的难题是微服务的合理拆分,拆分要体现单一职责原则,微服务间低耦合,微服务内高内聚
基于DDD的微服务架构设计