网站建设广州市,画册设计案例,投融网站建设方案,网站服务器ip更换本人是ABP初学者#xff0c;在看英文文档和tkb至简 的ABP框架理论研究总结(典藏版)时#xff0c;发现大神tkb至简中少了对Value Objects的翻译#xff0c;看文档是新的#xff0c;大神没时间把#xff0c;小弟给补充上。 介绍 值对象基类 最佳实践 介绍 “用于描述领… 本人是ABP初学者在看英文文档和tkb至简 的ABP框架理论研究总结(典藏版)时发现大神tkb至简中少了对Value Objects的翻译看文档是新的大神没时间把小弟给补充上。 介绍 值对象基类 最佳实践 介绍 “用于描述领域的某个方面而本身没有概念标识的对象称为 a VALUE OBJECT”(Eric Evans) 对于实体是相反的实体有它们的表示id,一个值对象没有标识。如果两个实体的标识不相同即使它们所有的其他实体属性是一样的它们也被称为不同的对象/实体。想象一下两个不同的人拥有相同的名字、姓氏和年龄但是他们拥有不同的身份证号他们就是不同的人。但是对于一个地址它是一个经典的值对象类如果两个地址是相同的国家、城市、街道号码...等等也被称为同样的地址。 在领域驱动模型中DDD值对象是领域对象的另一种类型它能包含业务逻辑它是领域必不可少的一部分。 值对象基类 在ABP中可以很简单的就创建值对象类型。ABP有一个ValueObjectT基类继承它就可以了。示例地址 值对象 类型 public class Address : ValueObjectAddress{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