校验数据传输对象 校验简介 使用数据标注 自定义校验 禁用校验 标准化 校验简介 应用的输入首先应该被校验.输入可以是用户的也可以是其他应用的.在一个web应用中,校验通常实现两次:客户端和服务端.客户端校验是为了用户体验.最好现在客户端校验表单并显示给用户无效的字段.但是,服务端校验要更紧要且不可避免的. 服务端校验一般在应用服务或控制器实现(通常,所有的服务从展示层获得数据).应用服务方法应该先检查(校验)输入再使用.ABP提供了良好的基础设施来自动校验应用的输入: 所有的应用服务方法 所有…
数据传输对象 DTOs的必要性 领域层的抽象 数据隐藏 序列化和懒加载问题 DTO转换和验证 示例 DTOs和实体间的自动映射 辅助接口和类 数据传输对象用来在应用层和展示层之间传输数据. 展示层调用应用服务方法并传递一个数据传输对象(DTO),然后应用服务使用领域对象执行一些特定的业务逻辑并返回给展示层一个DTO.因此,展示层完全与领域层隔离.在一个理想的分层应用中,展示层不直接使用领域对象(仓储.实体...). DTOs的必要性 最初,为每一个应用服务方法创建DTO看起来乏味且耗时,但是如果…
应用服务 IApplicationService接口 ApplicationService类 CrudService和AsyncCrudAppService类 简单的CRUD应用服务示例 自定义CRUD应用服务 GettingList Create和Update 其他方法参数 CRUD权限 工作单元 应用服务生命周期 应用服务将领域逻辑暴露给展示层.在展示层使用DTO(数据传输对象)作为参数调用应用服务,应用服务使用领域对象执行一些特定的业务逻辑,并返回DTO到展示层.因此,展示层与领域层是完全…
一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟别人说明白却困难的多,可能说的很明白但要写出来困难又加一重. 以前只了解过ABP,没有研究过,所以决定从翻译官方文档开始学习,园子里已经有大牛的博客对ABP进行了详细 .细致.深入的讲解.我做不到锦上添花只为激励自己和那些想写博客还没有动手的人赶紧行动起来吧.所以各位看官,可能有很多错误和不当的地方…
N层架构 介绍 ABP架构 其他(通用) 领域层 应用层 基础设施层 网络和展现层 其他 总结 介绍 应用程序代码库的分层架构是被广泛认可的可以减少程序复杂度.提高代码复用率的技术.为了实现分层架构,ABP遵循领域驱动设计的原则.在领域驱动设计中有四个基本层: 表现层:提供用户接口.使用应用层实现用户交互. 应用层:桥接表现层和领域层.协调业务对象来执行特定的应用任务. 领域层:包括业务对象以及业务规则.此层是整个应用的核心. 基础设施层:提供通用的技术能力来支持高层.基础设施层可以是使用ORM…
导航 创建菜单 注册导航提供者 显示菜单 每一个网络应用都会有一些菜单用来在pages/screens之间导航.ABP提供了通用的基础设施来创建并显示菜单. 创建菜单 应用可以由不同的模块组成,每一个模块都有自己的菜单项.为了定义菜单项,我们需要创建一个继承自NavigationProvider的类. 假定,我们有一个如下所示的主菜单: Tasks Reports Administration User management Role management 这里,Administration菜单…
ABP会话 介绍 关于IAbpSession 注入会话 会话属性 覆盖当前会话值 警告! 用户标示 介绍 如果应用需要登录的话,同样也需要知道当前用户可以执行哪些操作.ABP在展现层提供了会话对象,同时ABP提供了IAbpSession接口获取当前用户和租户,不需要使用ABP会话. 关于IAbpSession 为了能活真正的会话信息,IAbpSession接口必须被实现.可以用自己的方式实现它,在       module-zero工程里有这个接口的完整实现. IAbpSession也在ABP其…
值对象 介绍 值对象基类 最佳实践 介绍 "展现领域描述性层面且没有概念性身份的对象称之为值对象."(Eric Evans). 和实体相反,实体有身份标示(Id),值对象没有身份标示.如果两个实体的身份标示是不同的,那么就认为他们是不同的对象/实体,即使他们的所有属性都是一样的.考虑两个不同的人有相同的名字.姓氏和年龄,但是他们是不同的人,如果他们的身份编号不同的话.但是,对于一个地址(经典的值对象)类,如果两个地址有相同的国家.城市.街道编号等等,则认为为相同的地址. 在DDD中,值…
对象到对象的映射 介绍 IObjectMapper接口 AutoMapper集成 安装 创建映射 自动映射属性 自定义映射 MapTo扩展方法 单元测试 预定义映射 LocalizeableString->String 注入IMapper 介绍 映射一个相似的对象到另一个对象是常有的事情.因为两个对象(类)有相似/相同的属性,所以两个相似对象之间相互映射是乏味.重复的.考虑一个经典的应用服务方法如下: public class UserAppService : ApplicationServic…
ABP Nuget包 Packages Abp Abp.AspNetCore Abp.Web.Common Abp.Web Abp.Web.Mvc Abp.Web.Api Abp.Web.Api.OData Abp.Web.Resources Abp.Web.SignalR Abp.Owin Abp.EntityFramework.Common Abp.EntityFramework Abp.EntityFramework.GraphDiff Abp.EntityFrameworkCore Ab…