首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

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

编程知识
2024年09月20日 06:47

前言

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

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

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

最后总结

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

参考文章

 

From:https://www.cnblogs.com/Can-daydayup/p/18421685
本文地址: http://www.shuzixingkong.net/article/2144
0评论
提交 加载更多评论
其他文章 全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
在Python中,接口和抽象基类(Abstract Base Classes, ABCs)都用于定义类的结构和强制子类实现特定的方法,Python 没有内建的接口机制,但可以通过抽象基类(ABC)来模拟接口的行为。
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类 全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类 全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
利用AutoGpt将任何模型支持o1模型的推理实现
利用AutoGpt将任何模型支持o1模型的推理实现 相信大家都对于OpenAI最新出的o1模型都非常关注,它已经能通过推理让回复的效果更加理想, 但是目前o1的限制太大,而且使用o1至少也是需要购买OpenAI官方的会员价格也在20美刀(好贵!!),于是乎社区出现非常多相似的实现,通过更低成本得到更
利用AutoGpt将任何模型支持o1模型的推理实现 利用AutoGpt将任何模型支持o1模型的推理实现 利用AutoGpt将任何模型支持o1模型的推理实现
LoRaWAN网关价格干穿地板了
曾经LoRaWAN网关要上万块钱一台,后来卷到千把块钱,现在可以卷到500以内,还支持4G/ETH/WIFI,应该也是没谁了。 先上图片 1.1 产品特点 ◆ 高性能嵌入式硬件平台 ◆ 使用工业级 Cat.1 4G 模块 ◆ 宽压输入 DC 9~28V,工业级稳定性 ◆ 群脉冲:电源±2k
LoRaWAN网关价格干穿地板了 LoRaWAN网关价格干穿地板了 LoRaWAN网关价格干穿地板了
程序员编写技术文章需要的四个辅助神器 ,强烈建议收藏 !
编写技术文章是程序员分享经验和记录学习成果的重要方式。 为了让写作变得更轻松,有许多实用工具可以帮助提升效率,比如 Markdown 编辑器、画图工具等。 接下来,笔者将介绍四款简单实用的工具,帮助程序员更轻松地编写技术文章。 1 Typora :Markdown 编辑器 Typora 是一款简洁而
程序员编写技术文章需要的四个辅助神器 ,强烈建议收藏 ! 程序员编写技术文章需要的四个辅助神器 ,强烈建议收藏 ! 程序员编写技术文章需要的四个辅助神器 ,强烈建议收藏 !
Parquet.Net: 将 Apache Parquet 移植到 .NET
Parquet.Net 是一个用于读取和写入 Apache Parquet 文件的纯 .NET 库,使用MIT协议开源,github仓库:https://github.com/aloneguid/parquet-dotnet。Apache Parquet 是一种面向大数据的列式存储格式。Parque
Parquet.Net: 将 Apache Parquet 移植到 .NET
【VMware VCF】使用 VCF Import Tool 将现有 vSphere 环境转换为管理域。
VMware Cloud Foundation 5.2 发布并引入了一个新的功能,借助 VCF Import Tool 工具可以将现有 vSphere 环境直接转换(Convert)为管理工作负载域或者导入(Import)为 VI 工作负载域。通过这种能力,客户无需购买新硬件和进行复杂的部署和迁移工
【VMware VCF】使用 VCF Import Tool 将现有 vSphere 环境转换为管理域。 【VMware VCF】使用 VCF Import Tool 将现有 vSphere 环境转换为管理域。 【VMware VCF】使用 VCF Import Tool 将现有 vSphere 环境转换为管理域。
大模型应用开发初探 : 通用函数调用Planner
自动函数调用对大模型有较高的要求,比如Azure OpenAI、智谱AI等这些收费的大模型产品就能很好地规划和处理函数调用,而像是一些开源的小参数量的模型例如qwen2-7b-instruct这种可能效果就不太好。刚好,之前在网上看到一位大佬的开源通用函数调用的方案,于是重构了一下上一篇的Agent
大模型应用开发初探 : 通用函数调用Planner 大模型应用开发初探 : 通用函数调用Planner 大模型应用开发初探 : 通用函数调用Planner
C#|.net core 基础 - 扩展数组添加删除性能最好的方法
文章探讨了数组新增和删除元素的多种实现方式,并通过基准测试发现Array的Copy方法性能最优。同时,介绍了使用扩展方法和帮助类封装这些方法的方法,并讨论了返回新数组与直接修改原数组的优缺点。最终选择扩展方法实现,但因扩展方法限制无法直接修改原数组。
C#|.net core 基础 - 扩展数组添加删除性能最好的方法 C#|.net core 基础 - 扩展数组添加删除性能最好的方法 C#|.net core 基础 - 扩展数组添加删除性能最好的方法