DDD把模型分成四层
- UI 层,负责界面展示。
- 应用层(Application Layer),负责业务流程。
- 领域层(Domain Layer),负责领域逻辑
- 基建层(Infrastructure Layer),负责提供基建。
- DDD 把业务分成 UI、应用、领域、基建四层,其核心是高度提纯、通用、少变化的领域层,是谓“领域驱动”;
- 领域层中包含领域模型,捕捉领域逻辑,暴露出接口用于操作领域模型,这些接口提供的操作可以确保领域是自洽的;
- 领域模型既是业务描述,又是代码实现的结构设计,二者的结合点在于公开出来的界面、接口。
实体(Entity) & 值对象(Value Object)
实体与面向对象中的概念类似,在这里再次提出是因为它是领域模型的基本元素。在领域模型中,实体应该具有唯一的标识符,从设计的一开始就应该考虑实体,决定是否建立一个实体也是十分重要的。
值对象和我们说的编程中数值类型的变量是不同的,它仅仅是没有唯一标识符的实体,比如有两个收获地址的信息完全一样,那它就是值对象,并不是实体。值对象在领域模型中是可以被共享的,他们应该是“不可变的”(只读的),当有其他地方需要用到值对象时,可以将它的副本作为参数传递。
服务(Services)
当我们在分析某一领域时,一直在尝试如何将信息转化为领域模型,但并非所有的点我们都能用Model来涵盖。对象应当有属性,状态和行为,但有时领域中有一些行为是无法映射到具体的对象中的,我们也不能强行将其放入在某一个模型对象中,而将其单独作为一个方法又没有地方,此时就需要服务.
服务具有以下特点:
- 服务中体现的行为一定是不属于任何实体和值对象的,但它属于领域模型的范围内
- 服务的行为一定涉及其他多个对象
- 服务的操作是无状态的
Reference from https://blog.csdn.net/xuxuerlai/article/details/81318565