如何在 ASP.NET、Web API 和控制台应用程序中组织文件夹结构

科技   2024-11-16 08:00   广东  

在本文中,我们将探讨如何在 .NET 项目中组织代码,回顾文件夹结构的最佳实践,并深入探讨分离关注点的重要性,重点介绍 Models 文件夹和其他基本组件。

目录

  1. .NET 中的文件夹结构简介

  2. 为什么文件夹结构很重要

  3. 组织 .NET 项目的最佳实践

  4. .NET 解决方案中的常见文件夹类型

  • 模型

  • 视图

  • 控制器

  • 服务业

  • 数据访问

5. 不同类型 .NET 项目中的文件夹结构

  • ASP.NET MVC

  • Web API

  • 控制台应用程序

6. 使用基于特征的文件夹结构

7. 分层架构方法

8. 组织域驱动设计 (DDD) 项目

9. 文件夹结构示例

1. .NET 中的文件夹结构简介

常量文件夹结构可确保团队中的所有开发人员都知道在哪里查找代码以及如何提出新功能,从而避免杂乱无章的文件迷宫。

2. 为什么文件夹结构很重要

文件夹结构将是项目可维护性和可扩展性的支柱。以下是它很重要的一些原因:

  • 可扩展性:曾经的小项目最终会变得无法控制,因为文件夹组织会破坏可扩展性。

  • 可读性:干净的文件夹结构将允许新的开发人员或协作者快速进入项目,从而加快入门速度。

  • 关注点分离:不同代码用途(模型、服务、存储库)的文件夹将有助于保持关注点的隔离,从而增强测试和维护。

  • 效率:结构化模式允许开发人员准确访问他们正在寻找的内容,而无需浪费时间搜索杂乱无章的文件。

3. 组织 .NET 项目的最佳实践

以下是构建 .NET 项目的一些最佳实践:

  • 应根据职责对文件进行分组。例如,模型应该保存在文件夹下,服务应该保存在文件夹下,等等。Models Services

  • 对于大型项目,请按要素而不是图层分组。这样,不同的团队可以处理应用程序完全独立的部分,并且重叠最少。

例如,如果我有一个文件夹,那么它应该有一个实用程序或 ,该文件夹应该只包含与控制器相关的文件,依此类推。Helpers classes functionsControllers

4. .NET 解决方案中的常见文件夹类型

模型

应用程序的所有核心数据结构都位于该文件夹中。所有类都是将在应用程序的不同层之间传输的信息。Models

例如,在电子商务应用程序中,模型可能表示产品的名称、描述、价格和库存。Product

该文件夹是关注点分离的最大推动因素之一。Models

最重要的是,保持这些数据结构的整洁,只关注数据,在模型类中没有业务逻辑或 UI 代码

视图

MVC 应用程序中的文件夹包含用于呈现 UI 的所有 HTML 模板。它们是控制器和模型的紧密耦合表示。Views

控制器

该文件夹由 MVC 或 Web API 项目中的控制器组成。类通常通过与模型和视图交互来管理传入的请求、处理它们并返回响应。Controllers

服务业

该文件夹是保存业务逻辑实现的位置。服务包含应用程序中的核心功能,并表示位于 Controller 和 Repositories 之间中间的那些实体。Services

例如,an 可能包含如何下订单;处理验证、付款处理等。OrderService

数据访问(存储库)

该文件夹是数据访问逻辑的一个很好的抽象。Repositories

你可能想做的另一件事是将数据访问代码与业务逻辑分开,这是使用存储库并将所有 CRUD 操作封装到数据库的另一个原因。

5. 在不同类型的 .NET 项目中寻找结构

ASP.NET MVC

对于 ASP.NET MVC 应用程序,传统的文件夹结构包括:

  • Models/

  • Views/

  • Controllers/

  • Services/

  • wwwroot/(对于静态文件)

在这种方法中,重点是将表示层 () 与逻辑层 ( 和 ) 和数据 () 分开。ViewsControllersServicesModels

Web API

在 Web API 项目中,您可能不需要 ,因此结构通常如下所示:Views

  • Controllers/

  • Models/

  • Services/

  • DataAccess/或Repositories/

主要区别在于 Web API 项目专注于 HTTP 响应和数据处理,无需视图呈现。

控制台应用程序

对于控制台应用程序,文件夹结构通常更简单,但仍应进行组织:

  • Models/

  • Services/

  • DataAccess/

  • Utils/

控制台应用程序没有控制器或视图的概念,但仍受益于模型和服务的分离。

6. 使用基于特征的文件夹结构

当项目变得比传统 MVC 大时,使用基于功能的文件夹结构而不是按 、 和 进行组织可能更有意义,您可以按功能进行组织:modelview controller

/Features/  
/Product/
Models/
Controllers/
Views/
Services/
/Order/
Models/
Controllers/
Views/
Services/

7. 分层架构方法

另一种常见的方法是将项目组织成层。分层架构将您的应用程序拆分为水平切片:

  • 表示层:它负责用户界面或 API 响应。

  • 业务逻辑层:与您的应用程序(服务)相关的核心业务逻辑。

  • 数据访问层:必要时访问数据库,例如使用存储库。

分层文件夹结构可能如下所示:

/Presentation/  
Controllers/
Views/
/BusinessLogic/
Services/
Models/
/DataAccess/
Repositories/
Entities/

这种结构改进了关注点的分离,并使其更容易测试和维护层,而不会影响其他层。

8. 组织域驱动设计 (DDD) 项目

基于 DDD 的文件夹结构的示例可能如下所示:

/Domain/  
Entities/
ValueObjects/
Services/
Repositories/
Aggregates/
/Infrastructure/
Repositories/
Mappings/
/Application/
Commands/
Queries/
Handlers/

每一层对应于 DDD 体系结构中的特定角色,重点是将域逻辑与基础结构和应用程序逻辑隔离开来。

9. 文件夹结构示例

示例 1:基本 ASP.NET MVC 项目

/Controllers/  
HomeController.cs
/Models/
Product.cs
Order.cs
/Views/
/Home/
Index.cshtml
/Shared/
_Layout.cshtml
/Services/
OrderService.cs
/DataAccess/
ProductRepository.cs

示例 2:基于特征的项目

/Features/  
/Products/
Models/
Product.cs
Controllers/
ProductController.cs
Views/
ProductView.cshtml
Services/
ProductService.cs
/Orders/
Models/
Order.cs
Controllers/
OrderController.cs
Views/
OrderView.cshtml
Services/
OrderService.cs

示例 3:DDD 项目结构

/Domain/  
/Products/
Product.cs
ProductService.cs
ProductRepository.cs
/Orders/
Order.cs
OrderService.cs
OrderRepository.cs
/Infrastructure/
/Persistence/
DatabaseContext.cs
/Repositories/
ProductRepository.cs
/Application/
/Commands/
CreateProductCommand.cs
/Queries/
GetProductByIdQuery.cs

使用分离到模型、控制器、服务甚至存储库的合理文件夹中的关注点,以帮助您的团队专注于特定职责,从而提高效率和可维护性。

一旦你的项目达到一定的增长水平,那么你将需要重新发明你的文件夹结构以适应新的需求,但如果你打好了基础,扩展和处理这样的项目会容易得多。


推荐阅读:
使用 C#、OpenAI 和 Spectre.Console 创建控制台 ChatGPT 客户端
.NET 9正式发布,亮点是.NET Aspire和AI
今晚零点!一同相约 .NET Conf 2024
适用于 .NET 稳定的官方OpenAI库
.NET无侵入式对象池解决方案
相约 .NET 9!|共同关注 .NET Conf 2024 最新发布

点击下方卡片关注DotNet NB

一起交流学习

▲ 点击上方卡片关注DotNet NB,一起交流学习

请在公众号后台

回复 【路线图】获取.NET 2024开发者路线
回复 【原创内容】获取公众号原创内容
回复 【峰会视频】获取.NET Conf大会视频
回复 【个人简介】获取作者个人简介
回复 【年终总结】获取作者年终回顾
回复 加群加入DotNet NB 交流学习群

长按识别下方二维码,或点击阅读原文。和我一起,交流学习,分享心得。

DotNet NB
.NET 技术学习分享,社区热点分享,专注为 .NET 社区做贡献,愿我们互相交流学习,共同推动社区发展
 最新文章