一、ABP遵循DDD(领域驱动设计)的原则
? 展现层(Presentation):提供一个用户界面,实现用户交互操作。? 应用层(Application):进行展现层与领域层之间的协调,协调业务对象来执行特定的应用程序的任务。它不包含业务逻辑。
? 领域层(Domain):包括业务对象和业务规则,这是应用程序的核心层。
? 基础设施层(Infrastructure):提供通用技术来支持更高的层。例如基础设施层的仓储(Repository)可通过 ORM 来实现数据库交互。根据实际需要,可能会有额外添加的层。例如:
? 分布式服务层(Distributed Service):用于公开应用程序接口供远程客户端调用。比如通过 ASP.NET Web API 或 WCF 来实现。这些都是常见的以领域为中心的分层体系结构。不同的项目在实现上可能会有细微的差别。
二、领域层介绍
其实领域层也就是我们常说的业务层,而且所有的业务规则在此实现。
包含:实体(Entity)仓储(Repository)领域服务(Domain service)领域事件(Domain Event)工作单元(Unit of Work);
实体:业务领域的数据与操作,通过映射成数据库表;
1 public class AgentDto : Entity<int>2 {3 public string Name { get; set; }4 public string ShortName { get; set; }5 public string Mobile { get; set; }6 public string Linkman { get; set; }7 }
仓储:操作数据库进行数据存取、更新删除等;
领域服务:当处理的业务规则跨越两个实体,应该写在领域服务方法里面;
领域事件:在领域层有些特定情况发生时可以触发领域事件,并且在相应地方捕获并处理它们;
工作单元:工作单元是一种设计模式,用于维护一个由已经被修改(如增加、删除和更新等)的业务对象组成的列表。它负责协调这些业务对象的持久化工作及并发问题。
三、应用层介绍
应用层提供一些应用服务(Application Services)方法供展现层调用。一个应用服务方法接收一个 DTO(数据传输对象)作为输入参数,使用这个输入参数执行特定的领域层操作,并根
据需要可返回另一个 DTO。在展现层到领域层之间,不应该接收或返回实体(Entity)对象,应该进行 DTO 映射。一个应用服务方法通常被认为是一个工作单元(Unit of Work)。用户输入
参数的验证工作也应该在应用层实现。ABP 提供了一个基础架构让我们很容易地实现输入参数有效性验证。建议使用一种像 AutoMapper 这样的工具来进行实体与 DTO 之间的映射。
四、基础设施层
当在领域层中为定义了仓储接口,应该在基础设施层中实现这些接口
五、WEB与展示层
Web 层使用 ASP.NET MVC 和 Web API 来实现。可分别用于多页面应用程序(MPA)和单
页面应用程序(SPA)。
一般步骤
1.创建实体 Core 实体也是领域的一部分 例如Person 属性 { get ;set; }
2.创建DbContext EntityFramework 将实体类添加到IDSet
3.通过Database Migrations创建数据库表 Configuration.cs Code First
4.在Migrations文件夹下生成文件 Add-Migration InitialCreate Update-Database
5.定义仓储接口 Core IReposotory 泛型接口 定义增删改查方法
6.实现仓储类 Reposotory中实现定义
7.建立应用服务(Application Services) 在ApplicationShare中定义ITaskAppService继承自IApplicationService,TaskAppService实现 ABP自动为这个类提供一些功能特性(比如依赖注入和参数有效性验证)
8.数据验证 ApplicationShare 实现了IInputDto或IValidate接口
如果你觉得对你有帮助,欢迎赞赏[1]
原文地址:https://www.cnblogs.com/llw1996/p/11142630.html