领域驱动设计之代码优先-领域层设计-11 (翻译)
2013-03-21 10:12
435 查看
3.16.- 实现值对象
值对象有下面的特征:
- 没有标识符的概念
- 有相同值的两个值对象视为相等
- 不可变
一个值对象其实是一组属性。一个简单的.NET值对象可能如下。它还和EF代码优先不兼容,因为它像一个
复杂类型。注意我们怎样使它有不可变的特征。这可以初始化它的属性,之后它的属性就不能从外部修改:
值对象没有标识符。问题是该值对象不能和EF代码优先一起工作。为了使它工作,但同时是不可变的。
这样,我们要做的是设置私有的set。
这样改值对象就可以和EF 4.1 代码优先工作,可以被存到数据库中。
之后我们有另一个需要:两个有相同值的值对象应该视为相同。所以哦我们需要比较每个属性来做对比。我们可以
在每个值对象中实现比较方法,但是更好的方法是为值对象的基类添加特性,会在下节介绍。
值对象有下面的特征:
- 没有标识符的概念
- 有相同值的两个值对象视为相等
- 不可变
一个值对象其实是一组属性。一个简单的.NET值对象可能如下。它还和EF代码优先不兼容,因为它像一个
复杂类型。注意我们怎样使它有不可变的特征。这可以初始化它的属性,之后它的属性就不能从外部修改:
//Sample .NET VALUE-OBJECT public class Address { private readonly string _city; private readonly string _zipCode; private readonly string _addressLine1; private readonly string _addressLine2; public Address(string city, string zipCode, string addressLine1, string addressLine2 ) { _city = city; _zipCode = zipcode; _addressLine1= addressLine1; _addressLine2= addressLine2; } public string City { get { return _city; } } public string ZipCode { get { return _zipCode; } } public string AddressLine1 { get { return _addressLine1; } } public string AddressLine1 { get { return _addressLine2; } } }
值对象没有标识符。问题是该值对象不能和EF代码优先一起工作。为了使它工作,但同时是不可变的。
这样,我们要做的是设置私有的set。
//Sample VALUE-OBJECT Complex-Type public class Address : ValueObject<Address> { public string City { get; private set; } public string ZipCode { get; private set; } public string AddressLine1 { get; private set; } public string AddressLine2 { get; private set; } public Address(string city, string zipCode, string addressLine1, string addressLine2) { this.City = city; this.ZipCode = zipCode; this.AddressLine1 = addressLine1; this.AddressLine2 = addressLine2; } }
这样改值对象就可以和EF 4.1 代码优先工作,可以被存到数据库中。
之后我们有另一个需要:两个有相同值的值对象应该视为相同。所以哦我们需要比较每个属性来做对比。我们可以
在每个值对象中实现比较方法,但是更好的方法是为值对象的基类添加特性,会在下节介绍。
相关文章推荐
- 领域驱动设计之代码优先-领域层设计-3 (翻译)
- 领域驱动设计之代码优先-领域层设计-1 (翻译)
- 领域驱动设计之代码优先-领域层设计-4 (翻译)
- 领域驱动设计之代码优先-领域层设计-6 (翻译)
- 领域驱动设计之代码优先-领域层设计-5 (翻译)
- 领域驱动设计之代码优先-架构描述 (翻译)
- 领域驱动设计之代码优先-领域层设计-7 (翻译)
- 领域驱动设计之代码优先-领域层设计-8 (翻译)
- 领域驱动设计之代码优先-领域层设计-9 (翻译)
- 领域驱动设计之代码优先-领域层设计-10 (翻译)
- 领域驱动设计之代码优先-领域层设计-2 (翻译)
- 领域驱动设计之代码优先-架构描述 (通译)
- 【翻译】防腐层:面向领域驱动设计的更为稳健的系统集成方案
- 孙向晖老师翻译的领域驱动设计精简版
- DDD领域驱动设计之运用层代码
- 主题:一堂如何提高代码质量的培训课 之 领域驱动设计
- 领域驱动设计--之"MainPage"(今天开始翻译)
- 一个微服务+DDD(领域驱动设计)的代码结构示例
- 【翻译】防腐层:面向领域驱动设计的更为稳健的系统集成方案
- 领域驱动设计心得