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

前言

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

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

项目架构模式使用情况收集(微信投票,请在微信中打开参与):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返回给展示层。

最后总结

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

参考文章

相关推荐
追逐时光者9 小时前
精选2款C#/.NET开源且功能强大的网络通信框架
【.net】·【c#】·【开源项目】·【.net core】
追逐时光者2 天前
MudBlazor:基于Material Design风格开源且强大的Blazor组件库
【.net】·【c#】·【开源项目】·【.net core】·【blazor】
追逐时光者3 天前
一款.NET开源的屏幕实时翻译工具
【.net】·【c#】·【开源项目】·【实用工具】
追逐时光者4 天前
C# 单例模式的多种实现
【.net】·【c#】·【.net core】·【拾遗补漏】·【设计模式】
追逐时光者5 天前
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
【.net】·【c#】·【开源项目】·【.net core】·【拾遗补漏】
追逐时光者5 天前
2款使用.NET开发的数据库系统
【.net】·【c#】·【开源项目】·【.net core】
追逐时光者7 天前
.NET开发者福音:JetBrains官方宣布 Rider 非商用免费开放!
【.net】·【c#】·【实用工具】·【.net core】
追逐时光者9 天前
C#/.NET/.NET Core技术前沿周刊 | 第 11 期(2024年10.21-10.31)
【.net】·【c#】·【.net core】·【技术前沿周刊】
追逐时光者10 天前
C#/.NET/.NET Core优秀项目和框架2024年10月简报
【.net】·【c#】·【开源项目】·【实用工具】·【.net core】·【每月简报】
追逐时光者11 天前
一份阅读量30万+免费且全面的C#/.NET面试宝典
【.net】·【c#】·【.net core】·【wpf】·【winform】·【面试指南】