当前位置: 首页 > 科技观察

软件架构编年史:NeatArchitecture

时间:2023-03-20 10:41:30 科技观察

本文转载自微信公众号《一言》,作者秦语。转载本文请联系一言公众号。RobertC.Martin(众所周知的鲍勃叔叔)在2012年的一篇博客中发表了他对清洁架构的看法,并在多个会议上就架构发表了演讲。CleanArchitecture借鉴了许多熟悉和不熟悉的概念、规则和模式,并展示了它们如何组合在一起以产生构建应用程序的标准方式。站在EBIArchitecture、HexagonArchitecture和OnionArchitecture的肩膀上CleanArchitecture的核心目标与PortsandAdapters(Hexagon)Architecture和OnionArchitecture一致:Tool-independentcommunicationmechanismindependentindependentindependenttestability下面这张图发表在Clean架构博客揭示了架构的总体思路:RobertC.Martin2012,TheCleanArchitecture正如Bob大叔本人所写的博客,上图试图将最新的架构观点融入到一个操作的思路中。让我们将干净的架构与六边形和洋葱架构的图表进行比较,看看它们在哪里一致:外部化工具和通信机制六边形架构侧重于使用接口和适配器来集成来自应用程序中外的工具和通信机制。这也是洋葱架构的核心基石之一。如图所示,UI、基本设置和测试都在图的最外层。clean架构也有完全相同的特点,UI、Web、DB等都在最外层。最终,所有应用程序核心代码都是独立于框架/库的。依赖方向六边形体系结构中没有明确说明依赖方向。但是,我们可以很容易地推断出:应用程序具有接口,必须由适配器实现或使用。所以适配器取决于接口,取决于圆心的应用程序。外依赖于内,依赖方向指向圆心。在洋葱架构的示意图中,并没有指明依赖的方向,但JeffreyPalermo在他的第二篇博客中清楚地表明,所有的依赖都指向圆心。干净的架构明确指出依赖的方向指向圆心。他们都在架构级别引入了依赖倒置原则。内圈无法知道外圈的任何信息。此外,当数据跨边界传递时,它始终以内圈最方便的格式提供。分层六边形图仅显示两层:应用程序内部和应用程序外部。洋葱架构引入了DDD中定义的混合应用程序级别:控制用例逻辑的应用程序服务;封装既不是实体也不是值对象的领域逻辑的领域服务;实体、值对象等。..相比洋葱架构,clean架构保留了应用服务层(用例)和实体层,但似乎少了领域服务层。但是,看了Bob大叔的博客,我们会发现他认为任何领域对象都是一个实体,而不仅仅是DDD中的“实体”是一个实体:“一个实体可以是一个有方法的对象,也可以是一个GroupDataStructures和功能”。事实上,他合并了最中间的两层以简化原理图。独立可测试性三种架构风格的共同规则允许它们隔离应用程序和业务逻辑。这意味着在任何情况下我们都可以简单地模拟外部工具和交付机制来独立测试应用程序代码,而无需使用数据库或HTTP请求。正如我们所见,干净的架构结合了六边形架构和洋葱架构的规则。到目前为止,cleanarchitecture似乎并没有加入任何新的概念。但是,在干净的架构图的右下角,还有一个小图...站在MVC和EBI的肩膀上整洁的架构图右下角的这个小图说明了控制流是如何工作的。这张小图片还没有提供太多信息,但博客中的描述和RobertC.Martin的会议演示对这个主题进行了扩展。我们在上图中的左边看到的是MVC中的视图和控制器。另一层双实线中的所有形状都是MVC中的模型。这些模型也代表了EBI架构(我们可以清楚地看到边界、交互者和实体)、六边形架构中的“应用程序”、洋葱架构中的“应用程序核心”以及整齐的架构图中的“实体”多于。”层和“用例”层。假设HTTP请求按照控制流到达控制器。控制器然后:分解请求;使用相关数据创建请求模型;在交互器中执行一个方法(作为交互器接口,即边界,实例被注入到控制器中)并将请求模型传递给它;Interactor将:使用EntityGateway实现(作为EntityGateway接口的实例注入到Interactor中)来查找相关实体;做人口;将演示者返回给控制器;与演示者一起生成视图模型;将视图模型绑定到视图;将视图返回给客户端。这里我只是对“displayer”的用法有一些疑惑。我在项目中的实际做法和这里不太一样。我不会注入充满数据的演示对象,而是将某种DTO类型的数据返回给交互器。我通常拿的其实是一个MVP实现,controller负责从客户端接收数据并做出响应。总之,我不认为CleanArchitecture是革命性的,因为它实际上并没有导致突破性的概念或模式。然而,我认为这是一个相当重要的成就:它揭示了一些被遗忘的概念、规则和模式;它阐明了一些有用和重要的概念、规则和模式;它告诉我们如何将所有概念放在一起Bob叔叔关于清洁架构的工作总是让我想起牛顿。重力总是存在的,每个人都知道,从远离地面的高处放开并丢下一个苹果会导致它向地面坠落。牛顿所做的只是写了一篇揭示这一事实的论文。这是一件“简单”的事情,但它让人们思考它并根据它创造出更新的想法。换句话说,我认为RobertC.Martin是软件开发的牛顿[*注]!引自2012–RobertC.Martin–CleanArchitecture(NDC2012)2012–RobertC.Martin–TheCleanArchitecture2012–BenjaminEberlei–OOPBusinessApplications:Entity,Boundary,Interactor2017–LievenDoclo–关于CleanArchitecture2017的一些想法–GrzegorzZiemoński–CleanArchitectureIsScreamingQinYu,Android开发者/ThoughtWorks技术教练//译者,热衷于探索软件开发的方方面面,从端到云,从工具到实践。我喜欢通过翻译来学习和分享知识,我的翻译有《Kotlin实战》、《领域驱动设计精粹》、《Serverless架构:无服务器应用与AWS Lambda》和《云原生安全与DevOps保障》。