| |
|
![]() |
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 |
-> 领域驱动设计 -> ABP文档翻译 -> 正文阅读 |
[领域驱动设计]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、街道和编号。同时,它使人类实体更加简单。 |
领域驱动设计 最新文章 |
领域驱动设计的基础知识总结 |
海西 · 云交付 DevOps实践落地方案 |
多服务器终端交互利器 |
《静儿的服务治理私房菜》服务治理和架构 |
服务治理概述 |
美团.点评服务治理框架 |
ASP.NET Zero |
1.领域驱动简介.2.领域.子域.限界上下文.3. |
东麓庄园系统开发 |
东麓庄园系统开发 |
上一篇文章 下一篇文章 查看所有文章 |
|
360图书馆
软件开发资料
购物精选
新闻资讯
Chinese Culture
三丰软件
开发
中国文化
阅读网
日历
万年历
2019年12日历 2019-12-8 8:46:25 |
|
网站联系: qq:121756557 email:121756557@qq.com 编程知识 |