目录
值对象优点
- 把有紧密关系的属性打包为一个类型
- 把领域知识放到类的定义中
class shangjia
{
long id;
string name;
Geo location;
}
class Geo
{
double jingdu;
double weidu;
}
值对象的需求
- “商品”实体中的重量属性。我们如果把重量定义为double类型,那么其实是隐含了一个“重量单位”的领域知识,使用这个实体类的开发人员就需要知道这个领域知识,而且我们还要通过文档等形式把这个领域知识记录下来,这又面临一个文档和代码修改同步的问题。
- 实现:定义一个包含Value(数值)、Unit(单位)的Weight类型,然后把“商品”的重量属性设置为Weight类型。
class Shangpin { long id; string name; Weight weight; } class Weight { long Value; WeightUnit Unit; } enum WeightUnit{G,KG}
- 很多数值类型的属性其实都是隐含了单位的,比如金额隐含了币种信息。
值类型的实现
“从属实体类型(owned entities)”:使用Fluent API中的OwnsOne等方法来配置。
在EF Core中,实体的属性可以定义为枚举类型,枚举类型的属性在数据库中默认是以整数类型来保存的。对于直接操作数据库的