在本文中,我们将探讨如何在 .NET 项目中组织代码,回顾文件夹结构的最佳实践,并深入探讨分离关注点的重要性,重点介绍 Models 文件夹和其他基本组件。
5. 不同类型 .NET 项目中的文件夹结构
6. 使用基于特征的文件夹结构
7. 分层架构方法
8. 组织域驱动设计 (DDD) 项目
9. 文件夹结构示例
常量文件夹结构可确保团队中的所有开发人员都知道在哪里查找代码以及如何提出新功能,从而避免杂乱无章的文件迷宫。
文件夹结构将是项目可维护性和可扩展性的支柱。以下是它很重要的一些原因:
以下是构建 .NET 项目的一些最佳实践:
例如,如果我有一个文件夹,那么它应该有一个实用程序或 ,该文件夹应该只包含与控制器相关的文件,依此类推。Helpers classes functionsControllers
应用程序的所有核心数据结构都位于该文件夹中。所有类都是将在应用程序的不同层之间传输的信息。Models
例如,在电子商务应用程序中,模型可能表示产品的名称、描述、价格和库存。Product
该文件夹是关注点分离的最大推动因素之一。Models
最重要的是,保持这些数据结构的整洁,只关注数据,在模型类中没有业务逻辑或 UI 代码
MVC 应用程序中的文件夹包含用于呈现 UI 的所有 HTML 模板。它们是控制器和模型的紧密耦合表示。Views
该文件夹由 MVC 或 Web API 项目中的控制器组成。类通常通过与模型和视图交互来管理传入的请求、处理它们并返回响应。Controllers
该文件夹是保存业务逻辑实现的位置。服务包含应用程序中的核心功能,并表示位于 Controller 和 Repositories 之间中间的那些实体。Services
例如,an 可能包含如何下订单;处理验证、付款处理等。OrderService
该文件夹是数据访问逻辑的一个很好的抽象。Repositories
你可能想做的另一件事是将数据访问代码与业务逻辑分开,这是使用存储库并将所有 CRUD 操作封装到数据库的另一个原因。
对于 ASP.NET MVC 应用程序,传统的文件夹结构包括:
在这种方法中,重点是将表示层 () 与逻辑层 ( 和 ) 和数据 () 分开。ViewsControllersServicesModels
在 Web API 项目中,您可能不需要 ,因此结构通常如下所示:Views
主要区别在于 Web API 项目专注于 HTTP 响应和数据处理,无需视图呈现。
对于控制台应用程序,文件夹结构通常更简单,但仍应进行组织:
控制台应用程序没有控制器或视图的概念,但仍受益于模型和服务的分离。
当项目变得比传统 MVC 大时,使用基于功能的文件夹结构而不是按 、 和 进行组织可能更有意义,您可以按功能进行组织:modelview controller
/Features/
/Product/
Models/
Controllers/
Views/
Services/
/Order/
Models/
Controllers/
Views/
Services/
另一种常见的方法是将项目组织成层。分层架构将您的应用程序拆分为水平切片:
分层文件夹结构可能如下所示:
/Presentation/
Controllers/
Views/
/BusinessLogic/
Services/
Models/
/DataAccess/
Repositories/
Entities/
这种结构改进了关注点的分离,并使其更容易测试和维护层,而不会影响其他层。
基于 DDD 的文件夹结构的示例可能如下所示:
/Domain/
Entities/
ValueObjects/
Services/
Repositories/
Aggregates/
/Infrastructure/
Repositories/
Mappings/
/Application/
Commands/
Queries/
Handlers/
每一层对应于 DDD 体系结构中的特定角色,重点是将域逻辑与基础结构和应用程序逻辑隔离开来。
/Controllers/
HomeController.cs
/Models/
Product.cs
Order.cs
/Views/
/Home/
Index.cshtml
/Shared/
_Layout.cshtml
/Services/
OrderService.cs
/DataAccess/
ProductRepository.cs
/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
/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
使用分离到模型、控制器、服务甚至存储库的合理文件夹中的关注点,以帮助您的团队专注于特定职责,从而提高效率和可维护性。
一旦你的项目达到一定的增长水平,那么你将需要重新发明你的文件夹结构以适应新的需求,但如果你打好了基础,扩展和处理这样的项目会容易得多。