ABP文档翻译--值对象

  本人是ABP初学者,在看英文文档和@tkb至简 的ABP框架理论研究总结(典藏版)时,发现大神@tkb至简中少了对Value Objects的翻译,看文档是新的,大神没时间把,小弟给补充上。  

  • 介绍

  • 值对象基类

  • 最佳实践

介绍

  “用于描述领域的某个方面而本身没有概念标识的对象称为 a VALUE OBJECT”(Eric Evans)

  对于实体是相反的,实体有它们的表示(id),一个值对象没有标识。如果两个实体的标识不相同,即使它们所有的其他实体属性是一样的,它们也被称为不同的对象/实体。想象一下,两个不同的人拥有相同的名字、姓氏和年龄,但是他们拥有不同的身份证号,他们就是不同的人。但是,对于一个地址(它是一个经典的值对象)类,如果两个地址是相同的国家、城市、街道号码...等等,也被称为同样的地址。

  在领域驱动模型中(DDD),值对象是领域对象的另一种类型,它能包含业务逻辑,它是领域必不可少的一部分。

值对象基类

  在ABP中,可以很简单的就创建值对象类型ABP有一个ValueObject<T>基类,继承它就可以了。示例,地址 值对象 类型:

    public class Address : ValueObject<Address>{public Guid CityId { get; private set; } //引用城市实体.public string Street { get; private set; }public int Number { get; private set; }public Address(Guid cityId, string street, int number){CityId = cityId;Street = street;Number = number;}}

  假设两个值对象所有的属性都是一致的,值对象基类的重写equality操作(和其他相关操作和方法)来比较两个值对象。 那么,所有这些测试都通过:

var address1 = new Address(new Guid("21C67A65-ED5A-4512-AA29-66308FAAB5AF"), "Baris Manco Street", 42);
var address2 = new Address(new Guid("21C67A65-ED5A-4512-AA29-66308FAAB5AF"), "Baris Manco Street", 42);Assert.Equal(address1, address2);
Assert.Equal(address1.GetHashCode(), address2.GetHashCode());
Assert.True(address1 == address2);
Assert.False(address1 != address2);

   即使它们在内存中,是不同的对象。在我们的领域中也是相同的。

最佳实践

  在这里有一些对于值对象最佳的实践

  • 如果没有一个充分的理由设计值对象是易变的话,那最好设计一个值对象是不可变的(像地址这样的)。
  • 从整体概念上讲,属性组成一个值对象。例如,在一个人类实体属性中,不应该独立城市ID、街道和编号。同时,它使人类实体更加简单。

 

转载于:https://www.cnblogs.com/lizejia/p/6230396.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ so 反射_c++如何实现反射功能?

问题主 和 vczh 可以看下我这样弄&#xff0c;是否符合要求&#xff1f;定义类的时候稍微傻一点&#xff0c;但是他既不要求pod&#xff0c; 也没有什么侵入式的基类要求。甚至还允许你把成员定义成private的。连C11都不需要。struct test_type0{DEF_FIELD_BEGIN(test_type0)pr…

知识图谱简史:从1950到2019

来源&#xff1a;专知 地址&#xff1a;http://knowledgegraph.today/paper.html 作者 | Claudio Gutierrez 、 Juan F. Sequeda 编译 | Xiaowen 目录&#xff1a; 知识图谱可以被认为是实现计算机科学的早期愿景&#xff0c;即创建能够大规模集成知识和数据的智能系统。“知识…

easyui ajax post,EasyUI框架 使用Ajax提交注册信息的实现代码

EasyUI框架 使用Ajax提交注册信息的实现代码一、服务器代码&#xff1a;ControllerScope("prototype")public class StudentAction extends BaseAction {private static final long serialVersionUID -2612140283476148779L;private Logger logger Logger.getLogge…

PHP文件缓存实现

有些时候&#xff0c;我们不希望使用redis等第三方缓存&#xff0c;使得系统依赖于其他服务。这时候&#xff0c;文件缓存会是一个不错的选择。 我们需要文件缓存实现哪些功能&#xff1a; 功能实现&#xff1a;get、set、has、increment、decrement、delete、flush 能够在较短…

影响计算机算法世界的十位大师(上)

来源&#xff1a;数学职业家1、伟大的智者——Don E.Knuth&#xff0c;中文名&#xff1a;高德纳(1938-)算法和程序设计技术的先驱者。Oh,God!一些国外网站这样评价他。一般说来&#xff0c;不知道此人的程序员是不可原谅的。其经典著作《计算机程序设计艺术》更是被誉为算法中…

echars显示折点数据_数据可视化的基础语法

数据可视化的基础语法可视化主要是以图像来展示数据间的关系&#xff0c;常见的图形种类有折线图,散点图,条形图&#xff0c;直方图&#xff0c;饼图。此外在接下来课程中还会用到箱线图&#xff0c;热力图&#xff0c;蜘蛛图&#xff0c;表示二元变量分布和成对关系的视图。今…

ajax 输入不为空,ajax POST响应为空

尝试通过单击按钮发布数据&#xff0c;但作为响应&#xff0c;PHP脚本中将其显示为空这是html这是jqueryvar action 1;$("input").on("click", sendData);function sendData() {if ( action 1 ) {$("#btn").css("background", "…

cad快捷键文件路径_办公格式转太难不会看这里!CAD、PDF、Word、Excel、TXT教你玩转...

办公格式转&#xff0c;你遇到最难解决的问题是哪些&#xff1f;办公格式转&#xff0c;最让你头疼的文件格式是哪些&#xff1f;办公格式转&#xff0c;你最想要学习转换格式有哪些&#xff1f;我&#xff1a;Word、Excel、PPT、TXT、CAD、PDF、JPG统统都想要进行解决&#xf…

80x86汇编—分支循环程序设计

文章目录 查表法: 实现16进制数转ASCII码显示计算AX的绝对值判断有无实根地址表形成多分支从100,99,...,2,1倒序累加输入一个字符&#xff0c;然后输出它的二进制数大小写转换大写转小写小写转大写 冒泡排序剔除空格 查表法: 实现16进制数转ASCII码显示 题目要求&#xff1a; …

jquery 获取键值对中最大值_jquery属性的操作

HTML示例代码&#xff1a;第一个标题家用电器分类家用电器价格11男&#xff1a;女:第一行第二行第三行第四行第二个标题第一段第二段属性&#xff1a;attr(n|k,v|p|f):设置或返回被选属性的值name:返回所有所选属性的值key,value:以键值对的方式设置所有所选属性的值properties…

python怎么一直循环_python 基础之while无限循环

用户登录程序 username "chenxi" passwed "testki" counter 0 while counter < 3: # 测试3次 user input("输入用户名&#xff1a;") passw input("输入密码&#xff1a;") if user username and passw passwed : print(&qu…

织梦服务器系统win10,WIN服务器爆破DEDECMS后台目录

利用脚本python&#xff1a;#!/usr/bin/env python/** author Mochazz* team 红日安全团队* env pyton3**/import requestsimport itertoolscharacters "abcdefghijklmnopqrstuvwxyz0123456789_!#"back_dir ""flag 0url "http://192.168.1.9/t…

人工智能技术对专利制度的挑战与应对

来源&#xff1a;上海市法学会内容摘要人工智能技术作为人类的一项发明创造&#xff0c;本身具备了一定的创造力。无论是专利法治实践还是理论研究均无法否认&#xff0c;在弱人工智能时代&#xff0c;人工智能技术兼具发明创造工具和发明创造方案的提供者的双重身份。由此导致…

java.lang.UnsupportedClassVersionError: Bad version number in .class file异常

java.lang.UnsupportedClassVersionError: Bad version number in .class file异常 部署工程时也出现过因为版本不同引起的问题&#xff0c;那时我们用的IDE的编译器是JDK5.0&#xff0c;而那台Linux装的是JDK6.0&#xff0c;部署后发现很多功能都出错&#xff0c;看来有些东西…

网络推广恶意点击js_做好网络推广,是做好网络营销的必要条件

互联网社会里网络无处不在&#xff0c;商机无处不在&#xff0c;企业通过网络营销&#xff0c;能有效的避免线下竞争激烈的市场&#xff0c;做好网络推广&#xff0c;是做好网络营销的必要条件。一个优秀的网络推广团队不但能实现提高企业的知名度的目的&#xff0c;还能帮助企…

css盒子模型_css的盒子模型是什么

CSS盒子模型就是在网页设计中经常用到的CSS技术所使用的一种思维模型。css盒子模型又称为框模型 (Box Model) &#xff0c;包含了元素内容(content)、内边距(padding)、边框(border)、外边距(margin)几个要素组成了盒子模型。图中最内部的框是元素的实际内容&#xff0c;也就是…

ajax实现重新绘图,如何画Flot AJAX更新图

在上一章我们提到了如何画实时更新图,而这一章就要教你们如何利用AJAX去后端抓数据回来做实时更新图.系统负载实时更新图(AJAX)我们直接拿上一章的范例来做修改,在这里只说明有修改到的部份,有任何不清楚的地方,你也可以随时回到上一章去查看.准备资料首先,因为我们画的是系统负…

6G应用场景有哪些?首份6G报告给你揭晓

来源&#xff1a; 5G产业圈导 读中国移动研究院无线与终端技术研究所所长丁海煜介绍称&#xff0c;按照移动通信产业“使用一代、建设一代、研发一代”的发展节奏&#xff0c;业界预期6G将于2030年左右实现商用。“创新、协调、绿色、开放、共享”应成为5G向6G演进的新发展理念…

linux python 图形界面开发_python在linux制作图形界面(snack)

snack是一个用于在linux制作图形界面&#xff08;GUI&#xff09;的模块&#xff0c;该模块由c编写&#xff0c;而且redhat的系统都自带这个模块。 1.获取模块 虽然redhat系统会自带这个模块&#xff0c;但是直接去import snack会提示找不到模块&#xff0c;一个原因是我们重装…

虚拟搭建局域网模拟器_巧用虚拟局域网,快速搭建私有云,一步就能搞定

前段时间公司一直在使用局域网来进行文件共享&#xff0c;用一台电脑把某个文件夹在局域网里共享出来&#xff0c;其他电脑远程访问&#xff0c;但是这样使用太麻烦&#xff0c;要是主电脑忘记开机&#xff0c;其它人就用不了。再就是&#xff0c;一旦离开公司之后&#xff0c;…