为什么需要六边形架构?- silkandspinach

栏目: 编程工具 · 发布时间: 6年前

内容简介:传统应用程序架构的标准三层或四层模型似乎决定了系统中各种对象之间的依赖关系的方向:UI依赖于应用程序层,因为UI“驱动”后面发生的事情;应用程序层依赖于业务对象,业务对象执行所有特定于领域的事务,业务对象使用(因此依赖于)持久层和通信层,这两个层又使用并依赖于外部API。以这种方式实现分层模型好像很自然。ui ---> application ---> domain --->(persistence,comms)正是这种分层模型使许多应用程序难以或无法测试。这些感知的依赖关系中的每一层最终都体现在代码结构中

传统应用程序架构的标准三层或四层模型似乎决定了系统中各种对象之间的依赖关系的方向:UI依赖于应用程序层,因为UI“驱动”后面发生的事情;应用程序层依赖于业务对象,业务对象执行所有特定于领域的事务,业务对象使用(因此依赖于)持久层和通信层,这两个层又使用并依赖于外部API。以这种方式实现分层模型好像很自然。

ui ---> application ---> domain --->(persistence,comms)

正是这种分层模型使许多应用程序难以或无法测试。这些感知的依赖关系中的每一层最终都体现在代码结构中,并且通过隐身设计已经具体化变成分层模型。在这一点上,像我一样的人会叮嘱开发人员提高他们的测试覆盖率,但是我会被告知:“我们尝试过,但管理和准备需要测试GUI的Oracle测试数据需要很长时间”。或者当业务决定切换到新的数据库或企业通信架构,需要重新设计大量的业务逻辑。

Alistair Cockburn的 六边形建筑 模型引入了一个对称轴,可以帮助我们了解如何解决这些问题:

我们应该使用内部 - 外部模型来查看一个应用程序架构,而不是使用分层模型的上下视角。领域对象位于中间,并通过我称之为适配器: 比如一个 GUI,CGI脚本,命令行,硬件控制器,打印后台处理程序等连接到现实世界。每个适配器将领域对象连接到不同的“真实”世界的一部分。

因此,让我们从“六角形”的角度来看待我们的不可测试或不可移植的应用程序。(请记住,我们在这里仍然在讨论相同的代码库:只是我们的话语模型已经发生了变化。)使测试变得如此困难的依赖性,以及对分层模型的天真解释而存在的依赖性,显然违背了六角形模型的对称性。

ui --->(app,domain)--->service

如果我们希望能够轻松移植应用程序以使用不同的服务,我们需要能够轻松地替换掉将我们连接到这些服务的适配器。

ui --->(app,domain)--->new service

如果我们希望独立于硬件测试领域对象,我们需要能够用stubs存根,分流器或模拟Mock 对象替换各种适配器。

fit ---> (app, domain) ---> mock services

我们目前无法做到这一点,因为该设计违反了Bertrand Meyer的开放式原则(“ 系统应该向扩展开放,但不能修改 ”)。为了解决这个问题,我们需要使用Uncle Bob的 依赖倒置原则 :我们在中间的六边形中引入抽象,以便目前的适配器实现这些抽象。

ui --->(app,domain ---> abstraction)<--- service

现在恢复了对称性:每个适配器都依赖于中间六边形,而中间六边形(我们的域对象)独立于使用它的物理上下文。

适配器--->中间<---适配器

现在我们可以更容易地看到如何剥离我们希望的任何适配器,并用模拟对象或不同的服务替换它们。适配器/中间对称轴是提高企业应用程序的可测试性和可移植性的关键因素。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数字战争

数字战争

[英]查尔斯·亚瑟 / 余淼 / 中信出版社 / 2013-6-1 / 49

1998年,数码世界初具雏形。 至此以往,大浪淘沙。随着IT产业的迅猛发展,涌现出了以苹果、谷歌、微软为首的行业巨头。它们为争夺数码世界不同分支的霸主地位而争斗,包括搜索技术、移动音乐、智能手机和平板电脑市场。它们可利用的武器包括硬件、软件以及广告。同时,它们要赌上的则是公司的声望,当然,还有我们的未来。然而,无论在产品创新还是在战略优势上,这些企业彼此竞争、彼此砥砺,推动了行业的良性发展。......一起来看看 《数字战争》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具