代码改变世界

DDD学习笔记----基础知识(1)

2022-12-02 22:53  sunice  阅读(64)  评论(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;
}