审计(Audit)

本地化(Localization)

事件总线(Event Bus)

多租户(multi-tenancy technology)

DDD分层

实体(Entity)

值对象(Value Object)

聚合根(Aggregate Root)

仓储(Repository)

应用服务(Application Services)

数据传输对象(DTO)

工作单元(Unit Of Work)

前言

ABP vNext(以下简称ABP)的前身是asp.net boilerplate(老版abp),它不是一个简单的版本更新,而是完全基于.NET Core的重写。之前有听说过ABP框架,但是一直没有去详细了解。最近认真学习了一下,准备记录下自己的一些心得,计划分为3部分来进行:

ABP基础(就是官网上一些基本的功能)

ABP实战(使用ABP+vue开发一个简单项目)

ABP模块化(微服务简单介绍)

首先,这是以一个0基础的视角去写的,所以会比较基础,适合新手。文中如果有不对的地方,大家可以帮我指出来相互学习。。。

开始

ABP官网:https://www.abp.io/

ABP GitHub:https://github.com/abpframework/abp

要学习ABP,首先肯定要认真看一下官方的文档,虽然目前官方文档还不完整;然后对哪一部分不理解的,可以适当的阅读一下源码。

ABP是基于DDD:Domain-Driven Design(领域驱动设计)去开发的,当然框架本身不强制你使用DDD,但是他建议把DDD作为最佳实践。如果了解DDD,并且使用过老版本abp的话,看官方文档可能就比较轻松,反之则会比较吃力。。。首先DDD理论就非常抽象和复杂,要深刻理解它并不容易;其次是ABP内部使用了很多开源组件,比如EF Core,IdentityServer4,Autofac,AutoMapper,Swagger等等,所以也需要对这些组件有所了解。

本篇简单介绍一下ABP官方文档上一些重要的关键字,先理解这些关键字,才能更好的进一步学习。

审计(Audit)

审计是用于追踪数据变化的过程。平时开发中,你一定经常见到类似创建时间、创建人、修改时间、修改人等属性,这些属性就是用于数据审计。ABP框架提供了一些接口和基类来标准化这些属性,并自动设置它们的值;并且ABP提供了一个可扩展的审计日志系统,自动化的根据约定记录审计日志,并提供配置来控制审计日志的级别。ABP中审计相关基类/接口有:IAuditedObject、AuditedEntity、AuditedAggregateRoot等等。

本地化(Localization)

使应用程序支持多国语言。ABP的本地化系统与ASP.NET Core的本地化兼容。

事件总线(Event Bus)

事件总线是对观察者(发布-订阅)模式的一种实现。它是一种集中式事件处理机制,允许不同的组件之间进行彼此通信而又不需要相互依赖,达到一种解耦的目的。

如果没有接触过Event Bus,可能不太好理解。一个不太恰当的例子:A需要租房,B需要把房子租出去,A想直接找到B是比较困难的,A也不想去认识B,所以才有房产中介C,C就是Event Bus;B提前跟C说我的房子需要出租,A跟C说我给你钱你帮我租一个房,那么C很容易就帮A找到B完成租房,A甚至不需要知道B是谁,这里A就是事件的发布者,B是事件的订阅者。ABP支持本地Event Bus和分布式Event Bus。

多租户(multi-tenancy technology)

多租户是一种软件架构技术,这种架构可以让多个租户共用相同的系统,并且可以确保各租户间数据的隔离性。相信很多人都遇到过类似需求,同一个系统中根据不同客户区分数据;通常我们会在数据库表中增加一个客户Id作为标识,或者根据不同客户读取不同的数据库,这都是多租户数据隔离的实现方式,想自己很好的实现多租户还是很繁琐的。ABP的多租户模块提供了创建多租户应用程序的基本功能,可以很轻松的帮你实现多租户。

DDD分层

表示层: 为用户提供接口,使用应用层实现与用户交互。

应用层: 表示层与领域层的中介,编排业务对象执行特定的应用程序任务,使用应用程序逻辑实现用例。

领域层: 包含业务对象以及业务规则,是应用程序的核心。

基础设施层: 提供通用的技术功能,支持更高的层,主要使用第三方类库。

实体(Entity)

一个没有从其属性,而是通过连续性和身份的线索来定义的对象。

官方文档中这句话非常难理解。。。

简单来说,当一个对象只能由他的标识(Id)来区分,而不是从其他属性来区分时,这种对象被称为实体。比如有很多叫“张三”的男人,你不能通过姓名和性别来区分到底是哪个张三,只能通过Id。实体是可以持续变化的,我们可以对实体进行多次修改,但是无论怎么修改,实体始终拥有它唯一的标识。DDD中的实体通常都是充血模型,充血模型就是实体中不光有属性,还会包含行为(方法),反之DTO,ViewModel就是典型的贫血模型。实体通常映射到关系型数据库的表中,ABP中实体相关的基类/接口有:Entity、IEntity、AuditedEntity等等。

值对象(Value Object)

值对象和实体恰好相反,它不需要唯一标识,并且它不可以被改变。值对象通常是用来度量和描述事物,当你只关注某个对象的属性时,该对象便可以是一个值对象。比如“北京”就是“北京”,不存在Id=1或者Id=2的北京的说法。当然,值对象虽然不存在唯一标识,但是不代表它在数据库中就没有Id主键。。。

聚合根(Aggregate Root)

聚合是业务逻辑紧密关联的实体和值对象组合而成,聚合是数据修改和持久化的基本单元,聚合后产生的根实体称为聚合根。若一个聚合仅有一个实体,那这个实体就是聚合根。聚合根被视为一个单元,你不能单独去修改聚合根中的子实体。例如,某个业务流程中,会操作A、B、C、D四个对象(简单理解为数据库表),那么将ABCD聚合,产生一个聚合根E,对外部来说只需要操作E就可以了,领域内部会处理好ABCD。这样一方面避免了多个对象的混乱,另一方面也保证了数据的完整性,不会出现AB操作成功了,CD操作失败了,导致数据库产生脏数据。

聚合根引用聚合根:通过ID。

聚合根引用实体:通过对象(导航属性)。

聚合根引用值对象:通过对象(导航属性)。

仓储(Repository)

仓储用于操作领域对象(实际就是操作数据库),通常会为每个聚合根或不同的实体创建对应的仓储。ABP也提供了通用的泛型仓储:IRepository,内置了增删改查基本功能,直接注入就可以使用。

应用服务(Application Services)

应用层处于展示层与领域层之间,展示层通常调用应用服务,应用服务调用领域然后返回数据给展示层。展示层也可以直接调用领域。APB中应用服务相关的基类/接口有:IApplicationService、ApplicationService、ICrudAppService、CrudAppService等等。

数据传输对象(DTO)

通常领域对象不适合直接在应用层与展示层之间传递,比如User中的Passwod字段,这时候就需要用到DTO,DTO和ViewModel类似。ABP提供了一些DTO基类/接口:IEntityDto、EntityDto、AuditedEntityDto等等。

工作单元(Unit Of Work)

UOW模式是为了保证一次业务操作的数据完整性。ABP框架的UOW实现提供了对应用程序中的数据库连接和事务范围的抽象和控制,使用ABP的话通常你不用自己去写数据库事务相关代码。实际上工作单元不一定非要创建数据库事务,比如HTTP GET请求就不会启动事务性UOW,它们仍然启动UOW,但不创建数据库事务。这一切都由ABP框架自动完成。

最后

目前关于ABP的学习资源比较少,官方的文档也还没写完。。。不过ABP的作者最近开始发布自己的教学视频了,有条件的可以自行搜索一下。

abp ddd mysql_初识ABP vNext(1):开篇计划基础知识相关推荐

  1. 初识ABP vNext(1):开篇计划基础知识

    点击上方蓝字"小黑在哪里"关注我吧 审计(Audit) 本地化(Localization) 事件总线(Event Bus) 多租户(multi-tenancy technology ...

  2. abp 使用mysql_在Abp框架中使用Mysql数据库的方法以及相关问题小记

    最近发现了一款DDD的框架 看起来不错,据说挺流弊的 刚好最近要弄点小东西,拿来试试也不错 苦于穷逼买不起高配服务器,只好装mysql数据库了 下面说下如何在该框架下使用Mysql数据库 打开项目后, ...

  3. 无线技术开发开篇 无线基础 知识

    2.4G技术跟蓝牙技术的区别 无线设备,除了带来方便外,逐渐成为了街头的一种时尚.的确,无线设计能带来方便之余,还给年轻人"酷"的感觉.无线耳机就是一种常见的街头时尚设备耳机,就跟 ...

  4. 初识ABP vNext(10):ABP设置管理

    点击上方蓝字"小黑在哪里"关注我吧 定义设置 使用设置 前言 上一篇介绍了ABP模块化开发的基本步骤,完成了一个简单的文件上传功能.通常的模块都有一些自己的配置信息,比如上篇讲到的 ...

  5. 初识ABP vNext(8):ABP特征管理

    点击上方蓝字"小黑在哪里"关注我吧 定义特征 应用特征 用户数量 社交登录 前言 上一篇提到了ABP功能管理(特征管理),它来自ABP的FeatureManagement模块,AB ...

  6. 初识ABP vNext(3):vue对接ABP基本思路

    点击上方蓝字"小黑在哪里"关注我吧 登录 权限 本地化 创建项目 ABP vue-element-admin 前言 上一篇介绍了ABP的启动模板以及AbpHelper工具的基本使用 ...

  7. 初识ABP vNext(2):ABP启动模板

    点击上方蓝字"小黑在哪里"关注我吧 AbpHelper 模块安装 前言 上一篇介绍了ABP的一些基础知识,本篇继续介绍ABP的启动模板.使用ABP CLI命令就可以得到这个启动模板 ...

  8. abp angular 和mvc_初识ABP vNext(3):vue对接ABP基本思路

    登录 权限 本地化 创建项目 ABP vue-element-admin 前言 上一篇介绍了ABP的启动模板以及AbpHelper工具的基本使用,这一篇将进入项目实战部分.因为目前ABP的官方模板只支 ...

  9. abp过滤规则android,ABP的数据过滤器(Data Filters)

    我们在数据库开发中,一般会运用软删除 (soft delete)模式 ,即不直接从数据库删除数据 ,而是标记这笔数据为已删除.因此 ,如果实体被软删除了,那么它就应该不会在应用程序中被检索到.要达到这 ...

  10. JAVA类似ABP框架_Orchard 与 ABP架构比较 (aspnetboilerplate)

    前言:  ABP框架经常在一些.NET群中听群友提起,以前也浏览过官网,大致了解它是一个框架,直到今天本人才正式下载源码入门 ... 经过两个小时的ABP中文文档入门(感谢各位辛勤的翻译者) ,大致了 ...

最新文章

  1. python常用模块大全总结-常用python模块
  2. mac电脑安装python_【mac电脑怎么安装python】mac版python安装教程
  3. linux提高nand速度,linux-2.6.31.1内核支持Nand Flash
  4. jquery实现截取pc图片_jquery实现图片裁剪思路及实现
  5. 如何用xapmm测试php_如何在Xampp中运行PHP程序?
  6. jeewx 团队微信开发招募新人
  7. 金蝶k3财务接口_记录用友T+接口对接的心酸历程
  8. Spring MVC获取参数的几种常见方式
  9. 删除远程桌面记录的两种方式介绍
  10. 3、TPshop之邮箱注册配置教程以及常见错误集合
  11. 彐一夕儿本铺_2019-10-16汉字宫目录
  12. 基于Android的太阳方位角计算工具
  13. 基于微信小程序的毕业设计题目(31)共享会议室预约小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板)
  14. cesium实现场景导出图片功能
  15. 墨羽卿画第二章第5节:另一个世界,腊月廿四
  16. 数学/数论专题-学习笔记:狄利克雷卷积
  17. 第1关:伪分布式环境搭建
  18. 转载一篇--干烧失恋鲫鱼
  19. 哥德尔预言无穷小微积分是未来的数学分析
  20. linux 脚本usleep,Linux的sleep()和usleep()的使用

热门文章

  1. 计算机二级请假条,单位员工病假请假条范文模板
  2. POJ3295 Tautology
  3. python中count什么意思_python中函数COUNT()的功能是什么
  4. 【简单】字符串中最长元音字符串的长度
  5. E - Alarm Clock (尺取法)
  6. Wait for me和waitting for me有什么区别?
  7. 图形库LVGL v8.2版本移植
  8. mysql的root用户没有权限管理_mysql中root用户失去了root权限怎么处理呢?
  9. PTX-NPs 纳米粒子修饰紫杉醇/与桦木酸PEG/邻硝基苯丙酸紫杉醇偶联物的制备
  10. 大学生电脑装什么软件?我整理了 10 款 Windows 神器,个个都是宝藏级!