Web API Clean Architecture#
Asp.Net Core 8 Web Api: 简洁架构 + Azure 服务
结构示意图#

Domain Layer (领域层)
核心业务逻辑:这是系统的核心,包含了业务规则和业务逻辑。它定义了系统的核心功能和数据模型。
独立于其他层:Domain 层不依赖于其他层,而是其他层依赖于它。这意味着即使没有用户界面或数据库,Domain 层仍然可以独立存在。
实体和聚合:包含实体(Entity)和聚合(Aggregate),这些是业务逻辑的核心组件。
Application Layer (应用层)
协调业务逻辑:这一层负责协调 Domain 层中的业务逻辑,处理业务流程和事务。
接口适配器:Application 层通过接口适配器(如 Repository 接口)与 Infrastructure 层交互,通过控制器(如 MVC 控制器)与 Presentation 层交互。
用例:包含用例(Use Case),这些是业务流程的具体实现。
Presentation Layer (表示层)
用户界面:这一层负责处理用户界面(UI)相关的逻辑,包括视图和控制器。
视图和控制器:包含视图(View)和控制器(Controller),负责展示数据和处理用户输入。
依赖于 Application 层:Presentation 层依赖于 Application 层提供的接口来获取数据和处理业务逻辑。
Infrastructure Layer (基础设施层)
外部系统交互:这一层负责与外部系统(如数据库、文件系统、网络服务等)的交互。
实现接口适配器:实现 Application 层定义的接口适配器,如 Repository 接口的具体实现。
依赖于其他层:Infrastructure 层依赖于 Application 层提供的接口,但其他层不依赖于它。
依赖方向#
箭头方向:箭头表示依赖方向。Domain 层是核心,其他层依赖于它,但 Domain 层不依赖于其他层。
内聚和解耦:这种结构确保了内聚性(每一层都有明确的职责)和解耦性(每一层之间的依赖关系是单向的),从而提高了系统的可维护性和可测试性。
参见
Application项目引用Domain
API项目引用Application
API项目引用Infrastructure
Infrastructure项目引用Application
好处#
Testabillty: 系统、组件或软件能够被测试的容易程度
UI independence: 应用程序的用户界面部分应该与业务逻辑和数据处理部分分离
Free to choose/change the database: 自由选择或更换数据库技术的能力
Flexibility: 系统能够适应变化、扩展或调整的能力、灵活性
Transparency: 开放性和可访问性
- HTTP Client
- solution modules
- Entities
- Entity Framework
- Flexible Database connection
- Seeder
- Retrieving entities
- Retrieving DTOs
- Validation
- CQRS with MediatR
- Log
- Exceptions
- ASPNET Identity
- User Context
- authorization
- Custom user claims
- Custom authorization requirements
- Resource based authorization
- JWT
- Tests