为了账号安全,请及时绑定邮箱和手机立即绑定

DDD领域模型和充血对象在实际项目中的问题

标签:
Java

DDD领域模型

DDD领域模型是一个基于业务角度创建的一种逻辑模型、是业务即设计的思想。

充血对象

充血对象是把一部分业务放到实体上,也就是业务判断放到实体中完成,好处是业务判断集中。业务出现更改,只需要更改实体即可。

技术

由于充血对象在实际编码过程中,依赖于实体托管功能,所以在技术上,ORM基本使用Hibernate,Jpa这两种多,依赖于托管对象和事务,让整个模型和充血对象能够实现。

主要依赖于:实体托管,实体关联功能。

实现

在实体中设置OneToMany 等关联关系,就可以省略聚合根内部实体的ORM操作,在Jpa中也就是JpaRepository。角色实体设计如下:

依赖于这种设计,在事务中,直接操作role对象的roleDetails,在事务结束后,Jpa会自动提交托管的role对象。

这样就实现了充血对象和领域模型的设计。

在简单的业务中,该方式十分方便,操作对象和取出对象时,只需要操作聚合根即可。

问题

上述说了,在简业务中,会十分方便,但是在一些数据校验场景中需要处理的时候,就会有问题。

简单的场景举例:

需要删除某个权限的时候,需要删除所有角色中的该权限。所以需要操作role_detail表,这个时候,由于没有JpaRepository ,无法直接操作表,又不能遍历role,只能写SQL通过EntityManage操作这张表。

这是一个很严重的问题,在项目中,这种场景会经常出现,所以需要频繁的写SQL,操作内部实体十分不方便。

可以发现,在所有的内部类校验中,都麻烦,由于SQL问题,更导致后期表结构变化,SQL可能运行异常。无疑增大了后期改动的风险。毕竟项目后期更改是必须的。所以在数据准确性要求十分严格的时候,不建议使用领域模型

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
2674
获赞与收藏
169

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消