jpadao层继承什么_ABP框架领域层
领域层
•实体
•仓储
•领域服务
•工作单元(下期)
•领域事件(事件总线)(下期)
•实体是DDD(领域驱动设计)的核心概念之一。
•Eirc Evans是这样描述的实体的:“它根本上不是通过属性定义的,而是通过一系列连续性(continuity)和标识(identity)定义的”。
•因此,实体都有Id属性并且都存储到数据库中。
•一个实体一般会映射到数据库的一张表。
在ABP中,实体派生自Entity类,Entity默认是int(int32)
对仓储的定义:
•位于领域层和数据映射层之间,使用类似集合的接口来访问领域对象。
•在实践中,仓储是执行领域对象(实体和值对象)的数据库操作。一般地,一个分离的仓储用于一个实体(或者聚合根)。
IRepository接口
在ABP中,一个仓储类应该实现一个IRepository接口。为每一个仓储定义一个接口是一个好的做法。
IRepository接口:查询
获得单个实体
IRepository接口:查询
获得多个实体
IRepository接口:插入
获得多个实体
注:Insert、InsertOrUpdate 方法不会即时执行到数据库。只有带 AndGetId 的方法才会即时执行到数据库。
当工作单元完成时才统一执行到数据库。
IRepository接口:更新、删除
注:更新、删除方法不会即时执行到数据库。
当工作单元完成时才统一执行到数据库。
IRepository接口:使用
IRepository接口:最佳实践
•仓储类应该是无状态的。这意味着,你不应该定义仓储级别的状态对象,而且一个仓储方法调用不应该影响其他的调用。
•自定义仓储方法不应该包含业务逻辑或者应用逻辑,而应该只执行数据相关的或者orm特定的任务。
•当仓储使用依赖注入时,给其他服务定义更少的或者不要定义依赖。
领域服务(或DDD中的服务)用于执行领域操作和业务规则。Eric Evans描述了一个好的服务应该具备下面三个特征:
1.和领域概念相关的操作不是一个实体或者值对象的本质部分。
2.接口定义在领域模型其他元素的条款中。
3.操作是无状态的。
跟获得或返回一个数据传输对象的应用服务方法(DTO)不同,领域服务获得或者返回一个领域对象(比如实体或值类型)。
一个领域服务可以用于应用服务,也可以用于其他的领域服务,但不能直接用于展现层,服务层才直接用于展现层。
IDomainService接口和DomainService类
1.ABP定义了IDomainService接口,所有的领域服务都按照惯例实现了该接口。当实现时,领域服务会以transient自动注册到依赖注入系统。
●
2.此外,领域服务(可选地)可以从DomainService类继承。因此,它可以使用一些继承的属性,比如logging,本地化等等。当然,如果没有继承,如果需要的话也可以注入这些属性。
讨论:
为什么不使用应用服务实现领域服务中的逻辑呢?
我们可以简单地说,它不是应用服务要干的活。因为领域逻辑不是一个用例(use-case),而是一个 业务操作。我们可以在不同的用例中使用相同的“将一个任务派给一个人”的逻辑。比如说我们以后会更新这个任务,并且将这个任务派给其他人。
因此,我们可以使用相同的领域逻辑,这个逻辑就是“将一个任务派给一个人”,我们不用考虑这个具体的人和具体的任务。此外,我们可能有两个不同的UI(一个移动端应用和一个web应用)来共享相同的领域。
如何强制使用领域服务:
开发这个应用服务的开发者可能不知道存在一个TaskDomainService,而且可以直接将给定的 PersonId设置给任务的 AssignedPersonId。那么,如何阻止他这样做呢?
回顾
•实体:定义实体常用的几种基类 Entity、CreationAuditedEntity、AuditedEntity、FullAuditedEntity、IPassivable、AggregateRoot
•仓储:仓储提供数据层常用的操作方法,仓储的定义与使用方式,仓储使用的最佳实践和建议。
•领域服务:领域服务存在的意义、职责,如何定义一个领域服务。
jpadao层继承什么_ABP框架领域层相关推荐
- 殷浩详解DDD:领域层设计规范
简介: 在一个DDD架构设计中,领域层的设计合理性会直接影响整个架构的代码结构以及应用层.基础设施层的设计.但是领域层设计又是有挑战的任务,特别是在一个业务逻辑相对复杂应用中,每一个业务规则是应该放在 ...
- DDD系列第四讲:领域层设计规范
在一个DDD架构设计中,领域层的设计合理性会直接影响整个架构的代码结构以及应用层.基础设施层的设计.但是领域层设计又是有挑战的任务,特别是在一个业务逻辑相对复杂应用中,每一个业务规则是应该放在Enti ...
- DDD :领域层设计规范
在一个DDD架构设计中,领域层的设计合理性会直接影响整个架构的代码结构以及应用层.基础设施层的设计.但是领域层设计又是有挑战的任务,特别是在一个业务逻辑相对复杂应用中,每一个业务规则是应该放在Enti ...
- ABP领域层——实体
ABP领域层--实体 阅读目录 ABP领域层--实体 实体类(Entity classes) 接口约定 IEntity接口 回到目录 ABP领域层--实体 基于DDD的现代ASP.NET开发框架--A ...
- [单片机框架][drivers层][cw2015] fuelgauge 硬件电量计(二)
接上一篇:[单片机框架][device层] fuelgauge 电量计 [单片机框架][drivers层][cw2015] fuelgauge 硬件电量计(一) 本章是硬件电量计的使用方法,采用IIC ...
- ABP入门系列(3)——领域层定义仓储并实现
一.先来介绍下仓储 仓储(Repository): 仓储用来操作数据库进行数据存取.仓储接口在领域层定义,而仓储的实现类应该写在基础设施层. 在ABP中,仓储类要实现IRepository接口,接口定 ...
- Abp vnext Web应用程序开发教程 6 —— 作者:领域层
文章目录 关于本教程 下载源代码 介绍 作者实体 AuthorManager:领域服务 IAuthorRepository 结论 下一部分 关于本教程 本教程基于版本3.1 在本教程系列中,您将构建一 ...
- [Abp vNext 源码分析] - 5. DDD 的领域层支持(仓储、实体、值对象)
一.简要介绍 ABP vNext 框架本身就是围绕着 DDD 理念进行设计的,所以在 DDD 里面我们能够见到的实体.仓储.值对象.领域服务,ABP vNext 框架都为我们进行了实现,这些基础设施都 ...
- ABP入门系列(2)——领域层创建实体
这一节我们主要和领域层打交道.首先我们要对ABP的体系结构以及从模板创建的解决方案进行一一对应.网上有代码生成器去简化我们这一步的任务,但是不建议初学者去使用. 一.首先来看看ABP体系结构 ABP体 ...
最新文章
- 【做题记录】Codeforces做题记录
- 去除git mergetool不产生*.orig文件
- Anti-Aliasing SSAA MSAA MLAA SRAA 简介
- FAT和EXFAT文件系统
- .Net水晶报表的使用总结
- java excel添加公式_Java添加、读取Excel公式
- 返回路径平面上的间隙_返回电流及其与通孔的关系
- 付出与收获对等的自然法则,执行力离开去做马上去做
- code函数oracle列子,Oracle Pivot函数语法详解及应用实例
- 常见电平信号、RS232与RS485相关知识总结
- 第一章 Python数据模型
- 【渝粤教育】电大中专营销策划原理与实务 (3)作业 题库
- Gym 100818 F Irrational Roots (数学)
- linux网络设备驱动(一)
- 大家查找医疗英文文献都去哪个网?
- 自适应学习系统_如何建立适应性学习系统
- Java大作业之餐厅管理系统
- Resource Acquisition Is Initialization
- 网易服务器修改权限等级,网易七鱼客服管理_七鱼客服管理人员权限设置_企业服务汇...
- 视频编辑器GoPro Quik for mac中文版
热门文章
- cocostuff10k数据集介绍_COCO数据集整理
- 启停系统错误_关掉自动启停系统,就可以用普通蓄电池代替启停蓄电池吗?
- SpringBoot定义统一的controller返回格式
- 帝国cms会员充值交易推广分润系统的界面实现与开发记录
- nanodet onnx踩坑记录
- 中山大学提出SimAM:无参Attention!助力分类/检测/分割涨点!
- pytorch volatile 和 requires_grad
- cuda nvcc dll
- 如何把OpenCV Python获取的图像传递到C层处理
- pip 系统无法将文件移到不同的磁盘驱动器 的问题