长沙正规企业网站制作平台,单品网站怎么建设,搭建网站要哪些知识,外贸网站的域名点击上方蓝字小黑在哪里关注我吧审计(Audit)本地化(Localization)事件总线(Event Bus)多租户(multi-tenancy technology)DDD分层实体(Entity)值对象(Value Object)聚合根(Aggregate Root)仓储(Repository)应用服务(Application Services)数据传输对象(DTO)工作单元… 点击上方蓝字小黑在哪里关注我吧审计(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实战使用ABPvue开发一个简单项目ABP模块化微服务简单介绍首先这是以一个0基础的视角去写的所以会比较基础适合新手。文中如果有不对的地方大家可以帮我指出来相互学习。。。开始ABP官网https://www.abp.io/ABP GitHubhttps://github.com/abpframework/abp要学习ABP首先肯定要认真看一下官方的文档虽然目前官方文档还不完整然后对哪一部分不理解的可以适当的阅读一下源码。ABP是基于DDD:Domain-Driven Design领域驱动设计去开发的当然框架本身不强制你使用DDD但是他建议把DDD作为最佳实践。如果了解DDD并且使用过老版本abp的话看官方文档可能就比较轻松反之则会比较吃力。。。首先DDD理论就非常抽象和复杂要深刻理解它并不容易其次是ABP内部使用了很多开源组件比如EF CoreIdentityServer4AutofacAutoMapperSwagger等等所以也需要对这些组件有所了解。本篇简单介绍一下ABP官方文档上一些重要的关键字先理解这些关键字才能更好的进一步学习。审计(Audit)审计是用于追踪数据变化的过程。平时开发中你一定经常见到类似创建时间、创建人、修改时间、修改人等属性这些属性就是用于数据审计。ABP框架提供了一些接口和基类来标准化这些属性并自动设置它们的值并且ABP提供了一个可扩展的审计日志系统自动化的根据约定记录审计日志并提供配置来控制审计日志的级别。ABP中审计相关基类/接口有IAuditedObject、AuditedEntity、AuditedAggregateRoot等等。本地化(Localization)使应用程序支持多国语言。ABP的本地化系统与ASP.NET Core的本地化兼容。事件总线(Event Bus)事件总线是对观察者发布-订阅模式的一种实现。它是一种集中式事件处理机制允许不同的组件之间进行彼此通信而又不需要相互依赖达到一种解耦的目的。如果没有接触过Event Bus可能不太好理解。一个不太恰当的例子A需要租房B需要把房子租出去A想直接找到B是比较困难的A也不想去认识B所以才有房产中介CC就是Event BusB提前跟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中的实体通常都是充血模型充血模型就是实体中不光有属性还会包含行为方法反之DTOViewModel就是典型的贫血模型。实体通常映射到关系型数据库的表中ABP中实体相关的基类/接口有Entity、IEntity、AuditedEntity等等。值对象(Value Object)值对象和实体恰好相反它不需要唯一标识并且它不可以被改变。值对象通常是用来度量和描述事物当你只关注某个对象的属性时该对象便可以是一个值对象。比如“北京”就是“北京”不存在Id1或者Id2的北京的说法。当然值对象虽然不存在唯一标识但是不代表它在数据库中就没有Id主键。。。聚合根(Aggregate Root)聚合是业务逻辑紧密关联的实体和值对象组合而成聚合是数据修改和持久化的基本单元聚合后产生的根实体称为聚合根。若一个聚合仅有一个实体那这个实体就是聚合根。聚合根被视为一个单元你不能单独去修改聚合根中的子实体。例如某个业务流程中会操作A、B、C、D四个对象简单理解为数据库表那么将ABCD聚合产生一个聚合根E对外部来说只需要操作E就可以了领域内部会处理好ABCD。这样一方面避免了多个对象的混乱另一方面也保证了数据的完整性不会出现AB操作成功了CD操作失败了导致数据库产生脏数据。聚合根引用聚合根通过ID。聚合根引用实体通过对象导航属性。聚合根引用值对象通过对象导航属性。仓储(Repository)仓储用于操作领域对象实际就是操作数据库通常会为每个聚合根或不同的实体创建对应的仓储。ABP也提供了通用的泛型仓储IRepositoryTEntity, TKey内置了增删改查基本功能直接注入就可以使用。应用服务(Application Services)应用层处于展示层与领域层之间展示层通常调用应用服务应用服务调用领域然后返回数据给展示层。展示层也可以直接调用领域。APB中应用服务相关的基类/接口有IApplicationService、ApplicationService、ICrudAppService、CrudAppService等等。数据传输对象(DTO)通常领域对象不适合直接在应用层与展示层之间传递比如User中的Passwod字段这时候就需要用到DTODTO和ViewModel类似。ABP提供了一些DTO基类/接口IEntityDto、EntityDto、AuditedEntityDto等等。工作单元(Unit Of Work)UOW模式是为了保证一次业务操作的数据完整性。ABP框架的UOW实现提供了对应用程序中的数据库连接和事务范围的抽象和控制使用ABP的话通常你不用自己去写数据库事务相关代码。实际上工作单元不一定非要创建数据库事务比如HTTP GET请求就不会启动事务性UOW它们仍然启动UOW但不创建数据库事务。这一切都由ABP框架自动完成。最后目前关于ABP的学习资源比较少官方的文档也还没写完。。。不过ABP的作者最近开始发布自己的教学视频了有条件的可以自行搜索一下。如果本文对您有用不妨点个“在看”或者转发朋友圈支持一下