实际项目中的整洁架构(Clean Architecture)各层的作用,你都掌握了吗?
ApplicationCore层:
应用程序核心层是我们的业务逻辑和领域模型,而且这些业务逻辑应该包含在我们的领域模型当中。
1.领域模型(Entities[数据和行为]、Aggregates、Value Objects):
一组相关的类表示我们业务领域概念模型。
Aggregates:聚合根对象和Repository一对一。
实体之间总是互相引用的,聚合根的作用是把相关逻辑的实体组合当作一个整体对待。
聚合是一致性(事务性)的边界,对领域模型进行分组和隔离。聚合是关联的对象(实体)群,放在一个聚合容器中。
2.相关接口 / 抽象 (Interfaces):
IRepository,IUnitOfWork,ILogger,INotififyService,Query Specification,EntityBase ...
仓储是协调领域模型和数据映射层的组件,实现领域模型数据持久化。
3.数据传输对象(DTOs)
UI/API 暴露的数据传输对象。
4.Exceptions
自定义业务异常对象
5.领域服务(Domain Services):
业务逻辑实现不依赖Infrastructure项目并且不包含具体实现细节代码(如:数据库访问代码)。
领域服务类实现我们的领域逻辑,这些逻辑不属于特定聚合中,很可能跨多个实体对象。
当一块业务逻辑无法融入任何现有聚合,而聚合又无法通过重新设计适应操作时,就需要考虑使用领域服务。
6.查询规范(Query Specification)
定义项目范围内可重用和可测试不同类型的查询。每个规范类型都定义了使用仓储运行查询所有的逻辑。
领域规则:业务处理过程中包含一些复杂的查询规则并且具有通用性,通过LINQ和Expression树来定义领域规则,实现动态查询。
Infrastructure层:
该层包含我们项目如何处理基础设施的代码和具体的实现细节代码。
在ApplicationCore层中定义的接口,在Infrastructure层中去做具体的实现。
还有其他的代码:比如数据持久化,文件访问,通知消息服务,记录日志,第三方接口集成等。这一层的主要作用是将与业务和领域模型无关的细节代码分离出来。
web/api层:
前后端分离,后端使用asp.net core提供数据服务接口
通常Web和ApplicationCore中的代码都是依赖的服务都是抽象的(Interface/Abstraction)
在web项目的StartUp类的ConfigureServices方法中配置IOC容器,
注册服务于具体实现类型的关系。
#程序员# #IT# #编程#
#学习# #知识# #计算机#
微信平台暂停新用户注册,据称进行技术升级。按说在中国该有微信好的都应该注册过了,如果每天还有大量新用户涌入,黑产可能占了很大比例,很多黑产都是重点打击对象。
希望这次整顿对于打击网络犯罪能起到一定作用。