前言

项目架构模式在软件开发中扮演着至关重要的角色,它们为开发者提供了一套组织和管理代码的指导原则,以提高软件的可维护性、可扩展性、可重用性和可测试性。

假如你有其他的项目架构模式推荐,欢迎在文末留言!!!

项目架构模式使用情况收集(微信投票,请在微信中打开参与):https://mp.weixin.qq.com/s/kr1vlt4tj3dSyXyRv-GqOw

三层架构

三层架构是一种经典的软件架构模式,它将应用程序分为三个主要层次:表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。

分层职责

  • 表示层(UI):负责用户界面和用户交互,是用户直接接触的部分。
  • 业务逻辑层(BLL):处理业务规则和业务逻辑,是应用程序的核心部分。它负责数据的处理、验证、计算等业务操作。
  • 数据访问层(DAL):负责与数据库的交互,包括数据的CRUD(创建、读取、更新、删除)操作。

MVC架构

MVC架构模式将一个应用区分为三部分主要组件:模型、视图、与控制器。这种模式有助实现关注分离,使用这种模式,用户请求被路由到控制器,控制器负责与模型协作以执行用户操作和/或返回请求结果。极大地提高了应用程序的可维护性和扩展性。

分层职责

  • 模型(Model):表示应用程序和任何应由其执行的业务逻辑或操作的状态。业务逻辑应与保持应用程序状态的任何实现逻辑一起封装在模型中。
  • 视图(View):负责通过用户界面展示内容。它们使用 Razor 视图引擎在 HTML 标记中嵌入 .NET 代码。视图中应该有最小逻辑,并且其中的任何逻辑都必须与展示内容相关。
  • 控制器(Controller):处理用户交互、使用模型并最终选择要呈现的视图的组件。在 MVC 应用程序中,视图仅显示信息;控制器处理并响应用户输入和交互。在 MVC 模式中,控制器是初始入口点,负责选择要使用的模型类型和要呈现的视图。

DDD分层架构

领域驱动设计(Domain-Driven Design,简称DDD)是一种软件设计方法和理念,由Eric Evans在2004年提出。它通过深入理解业务领域,将复杂的业务逻辑转化为可维护、可扩展的软件系统。DDD的核心在于建立一个丰富的领域模型,这个模型能够反映业务实体、业务规则和业务流程。

DDD 强调以领域模型为核心来驱动软件的设计和开发。

分层职责

  • 表示层(UI): 负责处理用户界面和用户交互,它可以是Web界面、移动应用程序或桌面应用程序等形式。表示层负责接收用户的输入和展示数据给用户,但它不包含业务逻辑。
  • 应用层(Application): 表示层与领域层的中介,编排业务对象执行特定的应用程序任务,使用应用程序逻辑实现用例。
  • 领域层(Domain): 包含业务对象以及业务规则,是应用程序的核心。领域层的设计应遵循领域驱动设计的原则,通过深入理解业务领域,将业务知识和业务逻辑封装在领域模型中,以提高软件系统的可维护性和可扩展性。
  • 基础设施层(Infrastructure): 提供技术基础设施支持,如数据库访问、消息队列、缓存等。

整洁架构

整洁架构(Clean Architecture)是一种软件架构设计原则,由罗伯特·C·马丁(Robert C. Martin)提出,它旨在使软件系统更加灵活、可维护和可测试,其核心目标是构建一种简洁、灵活且易于维护的系统结构。

分层职责

  • 实体层(Entities):实体层代表了系统中的核心业务概念和对象。这一层包含了那些在整个系统的生命周期中持续存在且具有明确业务含义的实体。
  • 用例层(Use Cases):用例层包含了系统的具体业务逻辑和用例。它协调实体层和其他层之间的交互,以实现特定的业务功能。
  • 接口适配器层(Interface Adapters):接口适配器层将用例层与外部系统(如数据库、用户界面、外部服务等)进行连接。它将外部系统的接口转换为用例层可以理解的形式,并将用例层的输出转换为适合外部系统的格式。
  • 框架与驱动层(Frameworks and Drivers):框架与驱动层包含了外部的框架和工具,如数据库、Web 框架、消息队列等。这一层通常是由具体的技术实现组成,为上层提供基础设施支持。

CQRS架构

CQRS(命令和查询责任分离)是一种架构模式,旨在将一个系统的读操作(查询)和写操作(命令)分离开来。通过这种分离,系统可以在处理读写请求时进行不同的优化,从而提高系统性能、可扩展性和维护性。

分层职责

  • Presentation(表现层):负责处理用户界面的请求和响应。它接收用户输入并将其传递给后端服务,同时将后端服务的响应展示给用户。
  • Validation(验证):在命令被处理之前,对用户输入的数据进行验证,确保数据的合法性和完整性。
  • Commands(命令):封装用户请求的写操作,如创建、更新或删除数据的操作。
  • Domain Logic(领域逻辑):执行核心业务逻辑和规则,命令处理器通常会调用领域模型和领域服务来执行业务逻辑,确保业务规则得到正确应用。
  • Data Persistence(数据持久化):在命令处理完成后,数据会被保存到写数据存储中,确保数据的一致性和持久性。
  • Write Data Store(写数据存储):写数据存储负责管理所有写操作的数据,包括事务处理和数据一致性。
  • Read Data Store(读数据存储):读数据存储优化了读取操作的性能,提供快速响应的查询结果。
  • Queries(查询):查询对象被传递给查询处理器,查询处理器直接从读数据存储中获取数据,并生成DTOs返回给展示层。

最后总结

每种项目架构模式都有其各自特点和适用场景,开发者应根据项目的具体需求和技术栈来选择最合适的项目架构模式。

参考文章

.NET常见的几种项目架构模式,你知道几种?(附带使用情况投票)的更多相关文章

  1. J2EE开发之三种项目架构

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6285069.html 在我们开发项目时,一般都要先划分好哪些是与用户交互的,哪些用来处理请求/数据等等,这些过 ...

  2. MVC、MVP与MVVM架构模式

    MVC(Model View Controller): View 层是界面,Model 层是业务逻辑,Controller 层用来调度 View 层和 Model 层, 将用户界面和业务逻辑合理的组织 ...

  3. 模型-视图-控制器模式(MVC模式,10种常见体系架构模式之一)

    一.简介: 架构模式是一个通用的.可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题.架构模式与软件设计模式类似,但具有更广泛的范围. 模型-视图-控制器模式,也称为MVC模式.是软件 ...

  4. SpringMVC内容略多 有用 熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

    熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构 ...

  5. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

  6. thinkphp 的两种建构模式 第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用。第二种架构模式两个单入口文件,分别生成两个应用定义define。。。函数可以定义配置文件。。。。

    thinkphp 的两种建构模式  第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用. ...

  7. 基于Repository模式设计项目架构—你可以参考的项目架构设计

    关于Repository模式,直接百度查就可以了,其来源是<企业应用架构模式>.我们新建一个Infrastructure文件夹,这里就是基础设施部分,EF Core的上下文类以及Repos ...

  8. <<.NET B/S 架构实践>> 几种概念区别 - 算法、设计模式、企业应用架构模式、架构模式

    算法:相信大家对算法肯定不陌生(但其实绝大多数开发人员对这个非常陌生且抗拒),因为从学校没毕业开始就已经被算法折磨了,哈哈 设计模式:爱学习的开发人员对这个也不会陌生,是些到了一定工作阶段必须学的思想 ...

  9. java架构之路-(设计模式)五种创建型模式之单例模式

    设计模式自身一直不是很了解,但其实我们时刻都在使用这些设计模式的,java有23种设计模式和6大原则. 设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可 ...

  10. Microservice架构模式简介

    在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...

随机推荐

  1. oeasy教您玩转vim - 47 - # 使用标记

    ​ 使用标记 回忆上节课内容 有了这个range.address我们可以做很多事情 跳转:44 复制和剪切 1,3d 3,$y %d o 配合搜索 /oeasy/,$y 5;/oeasy/d 其实还有 ...

  2. 2024NOI联合省选游记

    人生当中成功只是一时的,而失败却是主旋律. 不太好的的阅读体验 本文作者:xxxalq 所谓游记,顾名思义就是指游玩所记,所以重点在玩而不在省选. 由于没有参加 \(\text{NOIP}\),导致我 ...

  3. RS485总线防雷保护方案(转)

    RS485作为最为最常用的电表通讯方式之一.日常生活中雷电和静电干扰已经成为485通信总线在实际工程经常遇到的问题.故如何对芯片以及总线进行有效的保护,是摆在每一个使用者面前的一个问题.在这里,我们主 ...

  4. ansible 001 ansible介绍 原理 主机清单 定义变量 提权与连接

    ansible 自动化运维 ansible 部署应用程序 (在操作系统层面之上) 系统初始化过程 主机名,yun源,网络,服务,时间同步,内核参数 (可以在pxe这里完成) ansible可以方便10 ...

  5. python os.path 模块详解

    python os.path 模块详解 os.path.basename() 返回最后一项,通常是文件名os.path.dirname() 返回的是目录,不包含文件名os.path.split() 返 ...

  6. VirtualBox扩容CentOS-7虚拟机磁盘

    1.背景描述 如上图所示,根路径"/"所在的文件系统已没有可用的磁盘空间,需要扩容磁盘. df -h 2.VirtualBox操作 2.1.查看当前虚拟磁盘的大小 如上图所示,点击 ...

  7. 【SpringBoot】05 探索配置方式 Part1 指定和导入配置的注解

    @PropertySource & @ImportResource @ConfigurationProperties默认从全局配置文件中读取 我们可以拆解出来分成单独的配置文件 [提取Bean ...

  8. 【BatchProgram】工作用的小工具 - 自动访问常用页面

    需求: 我需要打开很多页面,但是忘了收藏的话,每次都要重新去找一遍打开 页面很多,不是一两个了,为什么这么多?因为开发情况就是这样啊: 正式生产一个页面,UAT测试一个页面,本地调试一个页面 每日工作 ...

  9. 【JavaScript】下拉联动回显问题

    首先是多级下拉联动实现: 这是DOM结构: <div> <label style="margin-left: 10px;display: inline-block;&quo ...

  10. 【Vue】Re02 指令:第一部分

    一.v-once指令 用于固定一次性赋值,后续Vue实例的赋值更改将不再对v-once指令的元素有效 <!DOCTYPE html> <html lang="en" ...