ABP官方文档翻译 3.2 值对象】的更多相关文章

值对象 介绍 值对象基类 最佳实践 介绍 "展现领域描述性层面且没有概念性身份的对象称之为值对象."(Eric Evans). 和实体相反,实体有身份标示(Id),值对象没有身份标示.如果两个实体的身份标示是不同的,那么就认为他们是不同的对象/实体,即使他们的所有属性都是一样的.考虑两个不同的人有相同的名字.姓氏和年龄,但是他们是不同的人,如果他们的身份编号不同的话.但是,对于一个地址(经典的值对象)类,如果两个地址有相同的国家.城市.街道编号等等,则认为为相同的地址. 在DDD中,值…
数据传输对象 DTOs的必要性 领域层的抽象 数据隐藏 序列化和懒加载问题 DTO转换和验证 示例 DTOs和实体间的自动映射 辅助接口和类 数据传输对象用来在应用层和展示层之间传输数据. 展示层调用应用服务方法并传递一个数据传输对象(DTO),然后应用服务使用领域对象执行一些特定的业务逻辑并返回给展示层一个DTO.因此,展示层完全与领域层隔离.在一个理想的分层应用中,展示层不直接使用领域对象(仓储.实体...). DTOs的必要性 最初,为每一个应用服务方法创建DTO看起来乏味且耗时,但是如果…
领域服务 介绍 IDomainService接口和DomainService类 示例 创建接口 服务实现 使用应用服务 一些探讨 为什么只有应用服务? 如何强制使用领域服务? 介绍 领域服务(或者在DDD中单纯的服务)用来执行领域操作和业务规则.Eric Evans在他的DDD书中描述了一个好的服务有三个特征: 1. 与领域概念关联的操作,但不是实体或值对象的自然组成部分. 2. 接口的定义依照领域模型的其他元素. 3. 操作是无状态的. 不像应用服务那样获取或返回DTO,领域服务获取或返回领域…
一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟别人说明白却困难的多,可能说的很明白但要写出来困难又加一重. 以前只了解过ABP,没有研究过,所以决定从翻译官方文档开始学习,园子里已经有大牛的博客对ABP进行了详细 .细致.深入的讲解.我做不到锦上添花只为激励自己和那些想写博客还没有动手的人赶紧行动起来吧.所以各位看官,可能有很多错误和不当的地方…
校验数据传输对象 校验简介 使用数据标注 自定义校验 禁用校验 标准化 校验简介 应用的输入首先应该被校验.输入可以是用户的也可以是其他应用的.在一个web应用中,校验通常实现两次:客户端和服务端.客户端校验是为了用户体验.最好现在客户端校验表单并显示给用户无效的字段.但是,服务端校验要更紧要且不可避免的. 服务端校验一般在应用服务或控制器实现(通常,所有的服务从展示层获得数据).应用服务方法应该先检查(校验)输入再使用.ABP提供了良好的基础设施来自动校验应用的输入: 所有的应用服务方法 所有…
对象到对象的映射 介绍 IObjectMapper接口 AutoMapper集成 安装 创建映射 自动映射属性 自定义映射 MapTo扩展方法 单元测试 预定义映射 LocalizeableString->String 注入IMapper 介绍 映射一个相似的对象到另一个对象是常有的事情.因为两个对象(类)有相似/相同的属性,所以两个相似对象之间相互映射是乏味.重复的.考虑一个经典的应用服务方法如下: public class UserAppService : ApplicationServic…
设置管理 介绍 关于 ISettingStore 定义设置 设置范围 重写设置定义 获取设置值 服务端 客户端 更改设置 关于缓存 介绍 每个应用都需要存储设置,并且在应用的某些地方需要使用这些设置.ABP提供了一个强大的在服务端和客户端都可以使用的基础设施存储/获取应用.租户和用户级别的设置. 一个设置是一个名称-值字符串对,一般存放在数据库(或其他源).我们可以存储非字符串值,但需要把他们转换成字符串. 关于 ISettingStore 为了使用设置系统,ISettingStore接口必须实…
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…
通知系统 介绍 发送模型 通知类型 通知数据 通知严重性 关于通知持久化 订阅通知 发布通知 用户通知管理 实时通知 客户端 通知存储 通知定义 介绍 在系统中通知用来基于特定的事件告知用户.ABP提供了pub/sub基础实时通知基础设施. 发送模型 有两种给用户发送通知的方式: 用户订阅一个特定的通知类型.然后我们发布此类型的一个通知,此类型会被发送给所有订阅的用户.这就是pub/sub模型. 我们可以直接给目标用户发送一个通知. 通知类型 通知有两种类型: 普通通知可以是任意类型.“如果一个…
JavaScript API AJAX 通知 消息 UI Block和Busy 事件总线 日志 其他实用功能 ABP提供了一套对象和函数,用来简化.标准化javascript的开发. 这里是ABP提供的APIs列表.点击标题查看详情和用法. AJAX 用来使用AJAX调用服务端的服务并解析返回值.因为ABP服务端的代码返回AJAX调用的标准响应,建议使用这个方法处理标准返回值. 通知 用来显示会自动消失的通知. 消息 用来给用户显示消息框(对话框). UI Block和Busy 用来为用户输入锁…
ASP.NET Core 介绍 迁移到ASP.NET Core? 启动模板 配置 启动类 模块配置 控制器 应用服务作为控制器 过滤器 授权过滤器 审计Action过滤器 校验过滤器 工作单元Action过滤器 异常过滤器 结果过滤器 Ajax请求的结果缓存 模型绑定器 视图 客户端代理 集成测试 介绍 本文档描述了ABP如何集成ASP.NET Core.ASP.NET Core通过Abp.AspNetCore nuget包实现集成. 迁移到ASP.NET Core? 如果你已经有一个工程并考虑…
动态Web APID层 创建动态Web API控制器 ForAll方法 重写ForAll ForMethods Http动词 WithVerb方法 HTTP特性 命名约定 API管理器 RemoteServie特性 动态Javascript代理 AJAX参数 单一服务脚本 Anaular集成 启用/禁用 包装结果 关于参数绑定 FormUrl和FormBody特性 DTOs对比原始类型 创建动态Web API控制器 这个文档是针对ASP.NET Web API的.如果你对ASP.NET Core…
数据过滤器 介绍 预定义过滤器 ISoftDelete 何时使用? IMustHaveTenant 何时使用? IMayHaveTenant 何时使用 禁用过滤器 关于using语句 关于多租户 全局禁用过滤器 启用过滤器 设置过滤器参数 SetTenantId方法 ORM集成 Entity Framework EntityFramework.DynaamicFilters文档 其他ORMs 介绍 软删除模式是常用的模式,这种模式并没有从数据库中删除实体而是打上'deleted'的标记.所以,如…
领域事件(事件总线) 事件总线 注入IEventBus 获取默认实例 定义事件 预定义事件 处理异常 实体更改 触发事件 处理事件 处理基础事件 处理者异常 处理多个事件 注册处理者 自动 手动 取消注册 在C#中,一个类可以定义自己的事件,其他类可以注册它以便当一些事情发生时就会被通知.对于桌面应用或者单独的windows服务而言,这是非常有用的.但是,对于Web应用,会有一点儿问题,因为对象在web请求中被创建并且是短暂存在的.注册类事件非常困难.直接注册另一个类的事件会使类变得紧耦合. 在…
 仓储 默认仓储 自定义仓储 自定义仓储接口 自定义仓储实现 基础仓储方法管理数据库连接 查询 获取单个实体 获取实体列表 关于IQueryable 自定义返回值 插入 更新 删除 其他 关于异步方法 管理数据库连接 仓储生命周期 仓储最佳实践 协调领域和数据映射层,使用类集合接口访问领域对象."(Martin Fowler) 实际上,仓储用来执行领域对象的数据库操作(实体和值类型).通常,每个对象(或聚合根)使用单独的仓储. 默认仓储 在ABP中,仓储类实现IRepository<TEn…
定时 介绍 时钟 客户端 时区 客户端 Binders和Converters 介绍 一些应用只针对一个时区,而其他的一些已用则有许多不同的时区.为了满足这样的需求和集中的时间操作,Abp提供了时间操作的通用基础设施. 时钟 Clocks是用来操作DateTime值的主要方法.它定义了如下的惊呆属性/方法: Now:根据当前的提供者获取当前时间. Kind:获取当前提供者的DateTimeKind. SupportsMultipleTimezone:获取一个值,指示当前提供者是否可以用于多时区的应…
缓存 介绍 ICacheManager 警告:GetCache方法 ICache ITypedCache 配置 实体缓存 实体缓存如何工作 Redis缓存集成 介绍 ABP为缓存提供了一个抽象接口,它内部使用这个缓存抽象.默认使用MemoryCache实现,但可以换用其他的缓存提供者实现.例如Abp.RedisCache包实现了在Redis中实现缓存.(参见下面的“Redis缓存集成”部分). ICacheManager 缓存的主要接口是ICacheManager.我们可以注入并使用它获取缓存.…
ABP会话 介绍 关于IAbpSession 注入会话 会话属性 覆盖当前会话值 警告! 用户标示 介绍 如果应用需要登录的话,同样也需要知道当前用户可以执行哪些操作.ABP在展现层提供了会话对象,同时ABP提供了IAbpSession接口获取当前用户和租户,不需要使用ABP会话. 关于IAbpSession 为了能活真正的会话信息,IAbpSession接口必须被实现.可以用自己的方式实现它,在       module-zero工程里有这个接口的完整实现. IAbpSession也在ABP其…
动态Web API层 创建动态Web API控制器 ForAll方法 重写ForAll ForMethods Http动词 WithVerb方法 HTTP特性 命名约定 API管理器 RemoteServie特性 动态Javascript代理 AJAX参数 单一服务脚本 Anaular集成 启用/禁用 包装结果 关于参数绑定 FormUrl和FormBody特性 DTOs对比原始类型 创建动态Web API控制器 这个文档是针对ASP.NET Web API的.如果你对ASP.NET Core感…
一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟别人说明白却困难的多,可能说的很明白但要写出来困难又加一重. 以前只了解过ABP,没有研究过,所以决定从翻译官方文档开始学习,园子里已经有大牛的博客对ABP进行了详细 .细致.深入的讲解.我做不到锦上添花只为激励自己和那些想写博客还没有动手的人赶紧行动起来吧.所以各位看官,可能有很多错误和不当的地方…
NHibernate集成 Nuget包 配置 实体映射 仓储 默认实现 自定义仓储 应用程序特定基础仓储类 ABP可以使用任何ORM框架,它内置集成NHibernate.此文档将讲解ABP如何使用NHibernate,假定你对NHibernate已经有了一定的了解. Nuget包 在ABP中实现NHibernate做为ORM框架的Nuget包为Abp.NHibernate.你需要在应用程序中添加它.最好在一个单独的程序集中实现NHibernate并在这个程序集里依赖Abp.NHibernate包…
SignalR集成 介绍 安装 服务器端 客户端 建立连接 內建特征 通知 在线客户端 PascalCase与CamelCase对比 你的SignalR代码 介绍 ABP中的Abp.Web.SignalRnuget包使的使用SignalR变得极其容易.参见SignalR文档了解关于SignalR更多的详细信息. 安装 服务器端 在工程中(通常在web层)安装Abp.Web.SignalR nuget包,并在模块中添加如下依赖: [DependsOn(typeof(AbpWebSignalRMod…
后台Jobs和Workers 介绍 后台Jobs 关于Job持久化 创建后台Job 在队列中添加一个新Job 默认的后台Job管理器 后台Job存储 配置 禁用Job执行 异常处理 Hangfire集成 后台Workers 创建后台Workers 注册后台Workers 后台Worker生命周期 高级计划安排 让你的应用一直运行 介绍 ABP提供了后台jobs和workers,他们用于在应用的后台线程中执行一些任务. 后台Jobs 后台Jobs用来排队一些需要在后台队列或持久化的方式执行一些任务…
CSRF/XSRF保护 介绍 HTTP动词 非浏览器客户端 ASP.NET MVC 特征 集成 布局视图 配置 ASP.NET Web API 特征 集成 集成到ASP.NET MVC客户端 集成到其他客户端 ASP.NET Core 特征 集成 Startup类 布局视图 客户端类库 jQuery Angular 其他类库 拦截XML HttpRequest 使用类库拦截器 动添加Header 内部构件 介绍 "跨站请求伪造(CSRF)是网络攻击的一种类型,当一个恶意的网站.email.博客.…
导航 创建菜单 注册导航提供者 显示菜单 每一个网络应用都会有一些菜单用来在pages/screens之间导航.ABP提供了通用的基础设施来创建并显示菜单. 创建菜单 应用可以由不同的模块组成,每一个模块都有自己的菜单项.为了定义菜单项,我们需要创建一个继承自NavigationProvider的类. 假定,我们有一个如下所示的主菜单: Tasks Reports Administration User management Role management 这里,Administration菜单…
本地化 介绍 应用程序语言 本地化源 XML文件 注册XML本地化源 JSON文件 注册JSON本地化源 资源文件 自定义源 当前语言是如何决定的 ASP.NET Core ASP.NET MVC 5.x 获取一个本地化文本 在服务端 在MVC控制器 在MVC视图 在Javascript 格式化参数 默认本地化源 扩展本地化源 获取语言 最佳实践 介绍 任何应用程序都会包含至少一种语言.许多的应用程序都包含多种语言.ABP提供了灵活的本地化系统. 应用程序语言 首要的事情是声明支持哪种语言.在模…
处理异常 介绍 启用错误处理 Non-Ajax请求 显示异常 UserFriendlyException Error模型 AJAX请求 异常事件 介绍 此文档是与ASP.NET MVC和Web API相关的.如果你对ASP.NET Core感兴趣,参见ASP.NET Core文档. 在web应用中,异常通常在MVC Controller actions和Web API Controller actions中处理.当异常发生时,应用程序的用户以某种方式被告知错误的相关信息及原因. 如果错误在正常的…
特征管理 介绍 关于IFeatureValueStore 特征类型 Boolean特征 Value特征 定义特征 基本特征属性 其他特征属性 特征层级 检查特征 使用RequiresFeature特性 RequiresFeature特性注意点 使用IFeatureChecker IsEnabled GetValue 客户端 IsEnabled GetValue 特征管理器 版本注意事项 介绍 大多数的Saas(多租户)应用有不同的版本(包),不同的版本有不同的特征.因此,他们可以给他们的租户(客…
授权 介绍 关于IPermissionChecker 定义权限 检查权限 使用AbpAuthorize特性 AbpAuthorize特性注意点 抑制授权 使用IPermissionChecker 在Razor视图 客户端(Javascript) 权限管理 介绍 几乎所有的企业应用都在一定程度上使用授权.在应用中,授权用来检查用户是否允许执行一些特定的操作.ABP定义了一个基础的权限设施来实现授权. 关于IPermissionChecker 授权系统使用IPermissionChecker来检查权…
应用服务 IApplicationService接口 ApplicationService类 CrudService和AsyncCrudAppService类 简单的CRUD应用服务示例 自定义CRUD应用服务 GettingList Create和Update 其他方法参数 CRUD权限 工作单元 应用服务生命周期 应用服务将领域逻辑暴露给展示层.在展示层使用DTO(数据传输对象)作为参数调用应用服务,应用服务使用领域对象执行一些特定的业务逻辑,并返回DTO到展示层.因此,展示层与领域层是完全…