文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

DDD 必备架构--六边形架构

2024-11-30 10:16

关注

图片

为了有效应对软件复杂性,通常会对其进行分类,然后对症下药逐个击破。

1. 软件系统复杂性

面对一个软件需求,我们经常会将其分为两类:

  1. 功能性需求。就是产品提出的众多业务功能,例如:用户登录、查询数据、添加订单等;
  2. 非功能性需求。指系统在实现功能时必须满足的技术指标,最常见的包括性能、可靠性、安全性、可维护性、易用性等,例如:系统的响应时间、并发访问量、容错能力、数据安全性、可扩展性等。

其实,这两类需求整好与软件系统的两类“复杂性”一一对应:

  1. 业务复杂性,指系统中业务逻辑和业务规则的复杂程度。业务复杂性主要来自于业务的规模、结构、变化性等,这个与软件所在领域有极大关系;
  2. 技术复杂性,指系统中所用技术的复杂程度。技术复杂性主要来自于所使用的数据库、网络协议、中间件、应用框架等,这与软件架构和基础设施关系巨大;

面对不同的需求和复杂性,其设计目标和应对方式也完全不同。

1.1. 业务复杂性

首先,看下业务复杂性:

图片

对于业务需求,我们追求的是系统的复用性和扩展性。

导致业务代码变化的原因有很多,比如:

这些变更都会导致业务代码越来越多、逻辑越来越复杂,最终变得难以维护。

为了更好的应对这些变化,常见的手段包括:

业务复杂性先简单介绍到这,接下来看下技术复杂性:

1.2. 技术复杂性

图片

对于非功能需求,我们追求的是系统的高性能和高可用。

导致技术复杂性激增的原因有很多,比如:

这些问题并不能通过简单的增加代码来解决,往往需要引入新技术或使用新方案:

通过对比,是否有一种感觉:“业务”与“技术” 差距巨大,可以说是天壤之别。所以需要一种架构,能够对 “业务” 和 “技术” 进行隔离,降低两者的相互影响,使得:

六边形架构,便可以解决这个问题。

2. 六边形架构

六边形架构出自《实现领域驱动设计》一书,与“洋葱架构” 非常相似,都能很好的实现 “业务” 与 “技术” 的分离。

在 “Command侧”(详见CQRS架构) DDD 仍旧是最佳解决方案,所以在此使用 “六边形架构” 作为顶级架构。

六边形架构如下:

图片

该架构由内外两个六边形组成,这也是其名称来源:

2.1.【业务】内六边形

内六边形聚焦于业务逻辑,使用良好的设计应对业务的复杂性;通过提升系统的复用性和扩展性,来应对未来的变化。

2.1.1. DDD

DDD 是解决复杂业务的一把利器,将业务需求和代码实现相结合,通过对业务领域的深入理解,构建出可复用、可维护、可扩展的领域模型。

DDD 分为战略和战术两部分,在此重点阐述战术部分。战术模型主要包括:

这些领域对象相互协作,共同承载复杂的业务场景,大幅提升了业务的复用性和扩展性。

2.1.2. TDD

也称为测试驱动开发,它的基本思想是在编写代码之前先编写测试,然后根据测试来编写代码,最后再运行测试。可以帮助开发人员更快地发现并修复代码中的bug,还可以让开发人员更加关注代码的设计,使代码更加健壮、可扩展和易维护。

业务模型与基础设施的解耦将为你的 TDD 带来众多好处:

2.1.3. 两顶帽子

两顶帽子,是落地重构的重要开发模式,是一种工作习惯,或者说是一种高效的工作流程。

两顶帽子法,将软件变更落地过程分为两个阶段:

  1. 【重构】抽取公共逻辑到方法、类,以便更好的被复用;
  2. 【设计模式】抽取模板方法,对核心逻辑进行统一;
  3. 【架构模式】抽取功能微内核,确定插件签名和功能;

2.2.【技术】外六边形

外六边形聚焦于技术,与公司基础设施密切相关,也受所用框架的各种约束。其核心是发挥框架和中间件的优势,更好的为业务提供服务。

根据应用场景的不同,我们将外六边形的组件分成两类:

他们是系统与外部的“翻译官”,将外部请求转换为系统可以理解的指令,并将系统响应转换为外部世界可以理解的格式,这种松耦合可以使系统更加灵活更具扩展性。

2.2.1. 输入适配器

负责将外部系统的请求转换为应用服务能够处理的格式,通常包括Web 请求、RPC调用、消息队列、定时任务等,是将外部请求转换为内部指令的桥梁。

常见的输入适配器主要包括:

2.2.2. 输出适配器

负责将应用程序输出结果转换为外部系统能够理解的格式,通常包括数据库、RPC调用、缓存、搜索、消息队列、文件系统等,是将内部响应转换为外部响应的桥梁。

常见的输出适配器主要包括:

这么多纷繁复杂的框架、中间件从另一个层面也验证了,外六边形是以技术作为驱动的,其核心就是:如何更好的使用这些技术工具,发挥每个框架的强项。

3. 小结

任意一个业务系统都会面对两类需求:

两类需求背后的驱动力(复杂性)完全不同:

为了更好的应对这两类变化,需要在架构上进行隔离,避免相互影响带来更多的复杂性,然后逐个击破。这就是六边形架构最擅长的领域:

来源:geekhalo内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯