DDD学习笔记----基础知识(1)
2022-12-02 22:53 sunice 阅读(72) 评论(0) 编辑 收藏 举报领域(Domain):一个组织做的事情。按照在项目中的重要程度划分为三个子领域:
核心域:处理项目中最核心的事情,跟组织业务联系紧密。
支撑域:处理项目中非核心的事情,有组织特性,不具有通用性。
通用域:解决通用的事情,不具有组织特性。
领域的不同分类决定了项目或公司的核心事情。
以手机公司举例:
对手机制造公司来说
手机设计和手机制造属于核心域
手机销售属于支撑域
后勤部门属于通用域(例如保洁人员)
----------------------------------------------
对于手机销售公司来说
手机设计和手机制造属于支撑域
手机销售属于核心域
后勤部门属于通用域(例如保洁人员)
通用语言:使用语义确切,没有二义性的语言。避免出现鸡同鸭讲的情况。
界限上下文:通用语言离不开特定的语义环境,只有确定通用语言的边界,才能没有歧义的描述一个业务对象。
例如:对于商城系统来说,用户可以是系统管理员,也可以是购物的人。具体是哪种类型的人就需要确定通用语言的边界。
可以说维护商城系统的用户,这个用户是管理员。使用商城购物车的用户,则是购物的人。
标识符:用来定义一个唯一的对象。类似数据库中的主键。
实体:拥有标识符,对象中其它状态会发生各种变化。标识符不会改变。
例如:Person类,id不变,age会产生变化。
Person p1=new Person() p1.Id="11" ; p1.Age=12;
Peron p2=new Person() p2.Id="11" ; p2.Age=15;
因为p1和p2的主键id一样,所以p1和p2是同一个实体。
值对象:没有标识符的对象,也有多个属性,依附某个实体对象而存在。
值对象和对应的实体对象有依赖关系。没有依赖的关系的不是这个实体对象的值对象。
例如:
Position 对象就是值对象。没有标识符,依赖于shop对象存在。
Staff 对象不是shop对象的值对象。因为员工作为一个人,可以去多个商店工作。所以,Staff不是shop对象的值对象。
Position 对象是shop对象的值对象。因为shop对象不存在了,Position在这个shop对象中就没有意义了。
class Shop //商家
{
string id;
int age;
Position po; //Position 是地理位置,有经度属性和维度属性
Staff[] staffs; //员工们
}
class Position //地理位置
{
string longitude; //经度
string dimension;//维度
}
class Staff //员工
{
string id;
string name;
string age;
}