DDD 必备架构--六边形架构( 三 )

  • 更好的测试隔离:业务逻辑和基础设施可以并行开发,避免两者相互干扰而产生不确定行为;
  • 有利于重构:业务逻辑和外部依赖分离,在重构代码时,可以聚焦于业务逻辑而不必担心外部依赖的稳定性和正确性;
  • 2.1.3. 两顶帽子
    两顶帽子,是落地重构的重要开发模式,是一种工作习惯 , 或者说是一种高效的工作流程 。
    两顶帽子法 , 将软件变更落地过程分为两个阶段:
    1. 优化结构阶段 。在不改变软件行为的前提下,对软件结构进行优化,使其更具扩展性 。比如:
      1. 【重构】抽取公共逻辑到方法、类,以便更好的被复用;
      2. 【设计模式】抽取模板方法,对核心逻辑进行统一;
      3. 【架构模式】抽取功能微内核,确定插件签名和功能;
    2. 添加功能阶段 。在调整后的具备更好的扩展性的代码基础上完成功能调整或者增加新功能,如:
      1. 新功能复用已有组件能力,避免重复开发;
      2. 以扩展点的方式增加新功能,提升开发效率;
    2.2.【技术】外六边形外六边形聚焦于技术 , 与公司基础设施密切相关,也受所用框架的各种约束 。其核心是发挥框架和中间件的优势,更好的为业务提供服务 。
    根据应用场景的不同,我们将外六边形的组件分成两类:
    1. 输入适配器 。将来自外部的数据转换为系统可以使用的格式;
    2. 输出适配器 。将系统内部的数据转换为外部可以使用的格式
    他们是系统与外部的“翻译官”,将外部请求转换为系统可以理解的指令,并将系统响应转换为外部世界可以理解的格式,这种松耦合可以使系统更加灵活更具扩展性 。
    2.2.1. 输入适配器
    负责将外部系统的请求转换为应用服务能够处理的格式,通常包括Web 请求、RPC调用、消息队列、定时任务等,是将外部请求转换为内部指令的桥梁 。
    常见的输入适配器主要包括:
    1. Web 请求 。处理 HTTP 请求,对请求进行转换、验证,将其转换为应用服务所需格式 , 调用接口完成业务逻辑,最后将处理结果转化为所需格式进行返回 。常见的框架有 Spring MVC、Struct2等;
    2. RPC 调用 。处理远程调用请求 , 将请求转换为应用程序所需格式,调用应用服务接口完成业务逻辑,最后返回处理结果;在 Spring Cloud 技术栈下,与 Web 请求高度类似,但仍旧具有自己的特点,需要与 Web 请求进行区分处理 。常见的 RPC 框架有 Spring Cloud、gRPC、Thrift、Dubbo等;
    3. 消息队列 。主要指的是消息队列的消费端,从消息队列中读取消息,将信息转换为应用程序所需格式 , 调用应用服务接口完成业务逻辑 。常见的有 RocketMQ、Kafka、RabbitMQ等;
    4. 定时任务 。由定时器周期性触发,调用应用服务的业务方法,完成某种后台任务 。常见的有Quartz、XXL-job、Spring Task 等;
    2.2.2. 输出适配器
    负责将应用程序输出结果转换为外部系统能够理解的格式,通常包括数据库、RPC调用、缓存、搜索、消息队列、文件系统等,是将内部响应转换为外部响应的桥梁 。
    常见的输出适配器主要包括:
    1. 数据库 。将领域模型中的模型数据保存到数据库进行持久化存储 , 常用的框架包括 MyBatis、Jpa、Hibernate等,中间件主要是 MySQL;
    2. 缓存 。模型数据发生变更后,对缓存数据进行清理或更新,常见框架包括本地缓存 Guava、Caffeine、EhCache,分布式缓存有 redis、Memcache、TAIr等;
    3. 搜索 。为应对多维度查询,系统会引入搜索引擎组件,在模型数据发生变更后,需要将变更同步到搜索引擎,常见的有Elasticsearch、Solr、Sphinx等;
    4. 消息队列 。这里主要指的是消息队列的发送端,当业务操作完成后,系统会向外发布领域事件,以将变更通知到下游系统,常见的有 RocketMQ、Kafka、RabbitMQ等;
    5. RPC调用 。这里主要指的是 RPC 的调用端 , 当业务模型对其他领域服务存在依赖时,需要通过 RPC 进行系统通信,常见的 RPC 框架有 Spring Cloud、gRPC、Thrift、Dubbo等;
    6. 文件系统 。这里简单理解为系统的日志输出即可,常见的有Log4j、Logback、SLF4J、JUL等;
    这么多纷繁复杂的框架、中间件从另一个层面也验证了,外六边形是以技术作为驱动的,其核心就是:如何更好的使用这些技术工具,发挥每个框架的强项 。


    推荐阅读