领域驱动设计之代码优先-领域层设计-11 (翻译)
来源:互联网 发布:网络机房布线图 编辑:程序博客网 时间:2024/05/12 02:33
3.16.- 实现值对象
值对象有下面的特征:
- 没有标识符的概念
- 有相同值的两个值对象视为相等
- 不可变
一个值对象其实是一组属性。一个简单的.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 代码优先工作,可以被存到数据库中。
之后我们有另一个需要:两个有相同值的值对象应该视为相同。所以哦我们需要比较每个属性来做对比。我们可以
在每个值对象中实现比较方法,但是更好的方法是为值对象的基类添加特性,会在下节介绍。
- 领域驱动设计之代码优先-领域层设计-11 (翻译)
- 领域驱动设计之代码优先-领域层设计-1 (翻译)
- 领域驱动设计之代码优先-领域层设计-2 (翻译)
- 领域驱动设计之代码优先-领域层设计-3 (翻译)
- 领域驱动设计之代码优先-领域层设计-4 (翻译)
- 领域驱动设计之代码优先-领域层设计-5 (翻译)
- 领域驱动设计之代码优先-领域层设计-6 (翻译)
- 领域驱动设计之代码优先-领域层设计-7 (翻译)
- 领域驱动设计之代码优先-领域层设计-8 (翻译)
- 领域驱动设计之代码优先-领域层设计-9 (翻译)
- 领域驱动设计之代码优先-领域层设计-10 (翻译)
- 领域驱动设计之代码优先-架构描述 (翻译)
- 领域驱动设计之代码优先-架构描述 (通译)
- 领域驱动设计案例之领域层框架搭建
- 领域驱动设计之领域模型
- 领域驱动设计之领域模型
- 领域驱动设计之领域模型
- 领域驱动设计之领域模型
- NLuke版本更新信息
- 领域驱动设计之代码优先-领域层设计-10 (翻译)
- Linux中记录终端(Terminal)输出到文本文件
- CentOS6.0安装GDB
- sqlserver数据库置疑解决
- 领域驱动设计之代码优先-领域层设计-11 (翻译)
- 近百android程序源码贡献 转载的自己看的
- QQ、淘宝、MSN、Skype在线状态代码生成方法
- C++ 电子书
- C#中操作XML文件(读写改删全接触)
- 使用JDBC连接SQL Server 2005
- gen already exists but is not a source folder. Convert to a source folder or rename it
- 请求、缓存、图片利用率和人力成本
- Hibernate 关系映射 总结整理