领域驱动设计 -- 工厂

工厂的由来

在平时工作中,如果领域对象的创建逻辑比较简单,那么通过构造器即可创建,如果领域对象的创建逻辑比较复杂的时候,构造器就无法胜任创建的工作了,DDD 中引入了一个新的领域概念来做这个事情:工厂。

领域对象的创建逻辑复不复杂,其实很难判断,一般在 Java 语言,类的构造器参数大于 3 个的时候,再使用构造器创建就不太合适了,这时候我们会新建一个工厂,来创建 Java 类,同理,当领域对象的属性太多,通过构造器一次性创建领域对象时,也会比较复杂,这时候我们可以把复杂的创建工作交给工厂,工厂创建完成后,返回一个完整的领域对象。

注:因为我们的实体是有服务能力的,所以会使用spring,那怎么去创建我们的实体,就需要在实体内部提供工厂方法创建实体。

工厂的场景

工厂有两大场景,一个是用来新建对象,一个是用来重塑对象。

新建对象的场景比较简单,比如房源实体属性太多,有 7、8 个属性,创建的时候需要借助工厂来进行创建。

重塑对象,在 《领域驱动设计:软件核心复杂性应对之道》 中有提过,截图如下:

img

截图描述比较苦涩,我们举两个例子说明下:

1:我们在和外部公司进行对接的时候,大多数会通过 https 接口进行远程调用,这时我们接受到返回的参数,很可能是个 json 格式,因为依赖不了外部公司的 api 包,json 就不能反序列化成一个 DTO,这时候 json 转化成可使用的对象就比较复杂,我们可以把复杂的转化工作交给工厂,工厂此时的作用就是把 json 格式转化成可直接使用的对象。这种场景在对接基金保险公司时特别常见,基金保险公司的外部接口往往很复杂,字段非常多,这时候转化工作就很繁琐。

2:仓储在查询数据的时候,DO 转化成 VO 的工作也可以交给工厂,这个例子可以在仓储章节查看。

工厂的定义

工厂就是帮助领域对象进行创建和重塑的领域元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值