领域驱动设计之实体、值对象、领域服务

建立领域模型的第一步就是需要识别出实体、值对象与领域服务。

一.实体

1.实体是领域中需要唯一标识的领域概念。通常在业务中,需要唯一标识与区分的对象并需要持续对它进行跟踪,这样的对象我们认为是实体。这里的唯一标识通常指的是业务上的唯一标识,比如订单号、雇员工号等信息,而不是数据库中因为技术需要存储的自增int id或Guid列。

2.如果两个实体所有状态都一样,但如果标识不一样,就是两个不同实体。比如订单对象就应该是实体,就算两个订单的订单日期、订单总额等信息都一样,只要标识不一样,比如订单号,我们就认为它们是不同的实体。

3.实体只保留必要的属性与行为。比如一个客户实体应该保留客户的基本信息,但像国家、省、城市、街道等信息联合表示一个完整的概念,这种完整的概念应该迁移到其他实体或值对象上,这样有助于客户实体的理解和可维护性,并明确了清晰的职责。

二.值对象

1.值对象是领域中不需要唯一标识的领域概念,通常在业务中,我们不需要区分对象是哪一个,而只关心对象是什么,这样的对象我们认为是值对象。

2.如果两个对象所有状态都一样,我们就认为是同一个值对象,比如地址信息、订单状态信息等。

3.值对象是只读的,具有不变性不能直接修改,但可以被替换。如果我们要修改一个客户的街道信息,应该是Customer.Address address=new Address();address.Street=;而不应该是Customer.Address.Street=;

三.领域服务

1.某些业务行为不好归于某个实体或值对象时,可以把它们归与领域服务这种对象。

2.领域服务本质上就是一些操作,不包含状态,通常用于协调多个实体。比如借书领域中,账户、书与借书信息分别是三个实体(实际上分别是三个聚合的聚合根,聚合与聚合根后面文章再详细描述),借书的这个行为归于其中任何一个实体都不合适,虽然有一种认为是在账户实体上实现借书行为,将书作为参数传递给账户,并在方法中操作借书信息,但因为在账户聚合根上要使用到其他两个聚合根,建议还是通过领域服务进行协调。并且通过领域服务进行协调,还可以保证不同聚合的一致性(比如一个借书信息产生后,相关书的总数信息就减少1,同时账户所借书的总数上加1)。

3.领域服务可以直接暴露给应用层,这样可以有效的保护领域模型。

4.DDD中定义了三种服务:应用层服务、领域服务、基础服务。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android知识点总结

01--Java核心之JVM引入篇

虚拟机即:虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的 JVM只是一种用于计算设备的规范,广义来说相当于一个接口,而接口的实现可以不...

9730
来自专栏技术翻译

Python逻辑编程实例

逻辑编程是一种编程范例,它将计算视为对事实和规则构成的知识数据库的自动推理。它是一种编程方式,基于形式逻辑。这种语言的程序是一组逻辑形式的句子,表达关于问题域的...

40930
来自专栏企鹅号快讯

PHP的学习路线

1、PHP的学习路线 任何网站全都是由网页组成的,也就是说想完成一个网站,必须先学会做网页,掌握静态网页的制作技术是学习开发网站的先决条件。 因此我们要学习HT...

753100
来自专栏ThoughtWorks

TW洞见|也谈响应式编程

本文将会围绕reactive extension介绍reactive programming的起源,其要解决的问题。 编程范式的演进 最近几年,reactiv...

38260
来自专栏梧雨北辰的开发录

Python学习(1):入门与导学一、了解Python二、Python能做些什么三、Pthon特点四、Python的缺点五、Python之禅六、Python学习的相关资料

20960
来自专栏web前端教室

WEB前端架构(四)

今天是第三天,把购物车的基本功能算是都写完了。 这东西吧,思路想清楚之后,其实不难实现。 就是里面的逻辑交互很多,来来回回的,神烦啊,, 每一步每个操作都是对数...

24490
来自专栏申龙斌的程序人生

零基础学编程021:获取股票实时行情数据

春节期间重写了“笑来投资演练程序1.0版”这个程序,可以每个月自动更新几支股票的行情数据。程序的功能不复杂,但是编程新手想实现它仍有相当的困难。为了短时间内完成...

560120
来自专栏大数据文摘

编程新手入门踩过的25个“坑”,你犯过其中哪些错误?

20230
来自专栏技术博客

VS2013中Python学习笔记[环境搭建]

Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

17520
来自专栏HansBug's Lab

【作业】HansBug的前三次OO作业分析与小结

OO课程目前已经进行了三次的作业,容我在本文中做一点微小的工作。 第一次作业 第一次作业由于难度不大,所以笔者程序实际上写的也比较随意一些。(点击就送指导书~)...

36060

扫码关注云+社区

领取腾讯云代金券