架构设计之各种架构序章

一、前言

  在软件工程中,随着软件工程的兴起与发展,系统架构的风格越来越多,而且架构在不断地演化。目前常用的架构风格包括通用三层架构、关注点分离的MVC架构、领域驱动设计的领域驱动分层架构、六边型架构、洋葱架构、整洁架构、COLA架构、职责分离的CQRS架构。上述架构模式为开发者提供了一套组织和管理代码的指导原则,都是基于提高软件的可维护性可扩展性可重用性可测试性,不断发展演化而来的。本文将对这些架构模式进行简单的总结,后续通过实际Demo来落地,深刻理解架构。

二、架构

  1、三层架构(Three Architecture):是一种经典的软件架构模式,它将应用程序分为三个主要层次:表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。①表示层负责用户界面和用户交互,是用户直接接触的部分;②业务逻辑层负责处理业务规则和业务逻辑,是应用程序的核心部分。它负责数据的处理、验证、计算等业务操作;③数据访问层负责与数据库的交互,包括数据的CRUD(创建、读取、更新、删除)操作。

  2、MVC架构(MVC Architecture):是模型-视图-控制器(Model-View-Controller)模型,该软件架构模式将应用程序由三个组件组成分别是模型(Model)、视图(View)和控制器(Controller),以实现代码的分层组织和关注点的分离。①模型是核心组成部分,负责数据处理和业务逻辑(承担着管理应用的数据和业务逻辑,代表应用的数据和业务逻辑或操作的状态),业务逻辑应与保持应用程序状态的任何实现逻辑一起封装在模型中。主要包括从各种数据源获取数据,对数据的验证、处理、执行业务规则(验证规则、数据约束和业务规则),并且数据发生变更时,通知视图或者控制器,模型是相对稳定,重用率高,通常不直接与用户界面交互。②视图负责数据显示和用户交互,从模型中提取数据呈现给用户界面上,不处理任何业务逻辑和数据访问,视图的变化不会影响模型,模型的数据独立于视图。③控制器作为模式和视图的桥梁,接收用户的输入并调用模型处理和视图来响应这些输入。MVC源于桌面图形界面,然后至Web应用中,延伸MVVM、MVP模式,在Web应用使用MVC框架如ASP.NET MVC、SPRING MVC、Struts、Zend Framework、JSF等。

  3、DDD分层架构(Layer Architecture):是基于领域驱动设计思想的分层架构,主要包括表示层(UI)、应用层(Application)、领域层(Domain)、基础实施层(Infrastructure)。①表示层是处理用户界面和用户交互,用户界面可以是Web、移动页面或者桌面应用程序等。表示层接收用户输入、展示数据给用户,不处理业务逻辑。②应用层是表示层和领域层的中介,编排业务对象执行特定的的应用程序任务,使用应用程序逻辑实现用例(用户需求的使用场景)。③领域层包含业务对象和业务规则,是应用程序的核心,领域层的设计应遵循领域驱动设计的原则(领域的划分),通过深入理解业务领域,将业务知识和业务逻辑封装在领域模型中,以提高软件系统的可维护性和可扩展性。④基础设施层提供基础设施的支持,如数据的访问、消息队列、缓存、帮助类、工具类等。

  3、六边形架构(Hexagonal Architecture):六边形架构即端口适配器架构,通过业务逻辑为核心的方式组织逻辑视图,应用具备一个或者多个入站适配器,而不是表示层,入站适配器通过调用端口来调用业务逻辑处理外部的请求。同样,应用具备一个或者多个出站适配器,而不是数据持久层,出站适配器由业务逻辑中的出站端口调用,来调用外部系统(mysql,redis,zk等等) 。六边形架构的一个优点是业务逻辑不依赖于适配器,而是适配器来依赖于业务逻辑,保证业务逻辑稳定性、对业务逻辑进行单独的测试变得更容易。

  4、洋葱架构(Onion Architecture):洋葱架构是在端口适配器架构上贯彻将领域放在应用中心,将应用与UI放在外围;围绕独立的对象模型构建应用;内层定义接口,外层实现接口;依赖方向指向同心圆;所有的应用代码可以独立于基础设施编译和运行。主要包括如下层,①应用服务层是负责协调请求步骤的服务,不应该有任何业务逻辑,应用服务与其他服务交互来满足客户请求;②领域服务层是负责保持领域逻辑和业务规则,所有的业务逻辑应该作为领域服务的一部分来实现。领域服务由应用服务协调,服务于业务用例。不是简单的 CRUD 服务;③领域模型层是封装属性和实体行为;④基础设施层是在洋葱架构中的最外层,负责与外部世界交互,不解决任何领域的问题,没有任何逻辑;⑤可观察性服务层:负责监控应用,可以用于数据收集(指标、日志、痕迹)、数据存储、可视化等。

 

  5、整洁架构(Clean Architecture):整洁架构是把MVC、EBI、端口适配器、洋葱架构、DDD融会贯通,形成了一套落地实践方案,主要包括四层①实体层(Entities)代表系统中的核心业务对象和概念,包含了那些在整个系统的生命周期中持续存在且具有明确业务含义的实体。②用例层(Use Cases)包含系统具体的业务逻辑和用例,该层控制所有流向和流出实体层的数据流,并使用核心的实体及其业务规则来完成业务需求。③接口适配层(Interface Adapters)是接口适配器层将用例层与外部系统(如数据库、用户界面、外部服务等)进行连接。它将外部系统的接口转换为用例层可以理解的形式,并将用例层的输出转换为适合外部系统的格式。④框架与驱动层(Frameworks and Drivers):框架与驱动层包含了外部的框架和工具,如数据库、Web 框架、消息队列等。这一层通常是由具体的技术实现组成,为上层提供基础设施支持。针对上述四层描述在Enterprise Business Rules  企业级业务规则层:核心业务内聚(对应DDD的领域服务+领域实体);Application Business Rules 应用级业务规则层:应用层业务编排;Interface Adapters接口适配层:数据转化;Frameworks & Drivers框架和驱动层:底层实现和数据库等驱动。

  6、COLA架构(Clean Object-Oriented and Layered Architecture):即整洁面向对象分层架构,Clean Object-oriented and Layered Architecture,COLA,是一种旨在在架构层面控制软件复杂度的面向对象分层架构。该架构思想不仅提供了理论指导,还包含了具体实施的框架和工具,以确保整个软件系统保持清晰、可维护和可扩展。主要包括四层①表示层(Presentation Layer)负责处理用户界面和用户输入,呈现数据给用户;②应用层(Application Layer)包含应用的核心业务逻辑,协调领域服务的调用,不包含具体业务规则,主要用于编排业务流程③领域层(Domain Layer)包括领域模型、实体、值对象、聚合等,体现了系统的业务核心,包含具体的业务规则和业务逻辑;④基础设施层(Infrastructure Layer)处理与外部系统的通信、数据库访问等技术实现,保持与具体技术的解耦,确保系统的灵活性。COLA架构不仅仅提供一个指导理论,还提供了具体实施架构和工具。

  7、清晰架构(Explicit Architecture)是对DDD、端口适配器架构、洋葱架构、整洁架构、CQRS等进行融合的架构,①包括应用层(Application Layer),主要由Application Service(应用服务)业务用例的编排服务、CQRS命令/查询处理器、Event Listener事件监听器、Port端口定义(ORM接口、搜索引擎接口、消息接口)。领域层(Domain Layer),主要由领域服务(Domian Service)封装涉及多个实体(相同或者不同实体)的领域逻辑,并且领域服务之间可以相互调用。②领域模型(Domain Model)领域中某个概念的业务对象,如实体、值对象、枚举、领域事件。③主/主动适配器(用户界面User Interface的实现)比如MVC的控制器、命令查询总线。④次/被动适配器(基础设施Infrastructure的实现)比如数据持久化实现Mysql、短信通知实现、MQ通知、搜索引擎ES、事件总线。

 

三、总结

  从分层架构、EBI架构、MVC架构、领域驱动思想的领域驱动分层架构、六边形架构、洋葱架构、整洁架构、清晰架构都是不断完善的,如下图所示各个阶段架构的演变历史。后续将依次介绍各个架构的特点,及其Demo。

参考:软件架构编年史https://blog.csdn.net/luo15242208310/article/details/124708008https://zhuanlan.zhihu.com/p/670185762https://www.cnblogs.com/Can-daydayup/p/18421685

posted @   tuqunfu  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示