博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DDD领域模型和持久模型的实施方式(不定期更新ing)
阅读量:6870 次
发布时间:2019-06-26

本文共 1030 字,大约阅读时间需要 3 分钟。

  hot3.png

在领域驱动设计中,领域模型和持久模型往往存在阻抗失配,两个模型往往不能达到一致,我们需要用两个类来分别实现。

 

领域模型更倾向于业务场景;

领域模型不包含任何框架技术,只有标准库依赖和一些第三方工具类的依赖;

领域模型不需要为属性实现set方法,只需要实现业务逻辑的方法和需要属性的get方法,保持最

小知识原则;

领域模型需要自己实现业务规则的校验方法,比如一台家用轿车有4个轮胎、1个引擎等;

领域模型在领域内成熟之后会趋向于稳定。

 

持久模型更倾向于数据库;

持久化模型会依赖于实现技术,比如jpa实现就会包含jpa的注解等;

持久模型是为ORM或其他持久化技术服务的,一般都需要为每个属性创建get/set方法,是一个贫血模型;

持久模型常和一些验证框架一起使用保证数据库数据的合法性, @StringLength等等;

持久模型随着技术的改进,比如加缓存,分库分表,更换持久化实现,会出现不同形式的更改;

 

领域仓储repository有责任为领域模型隐藏持久化的实现技术,

它的接口只返回领域模型(更确切的说应该是返回聚合根),

仓储的实现中有必要实现 持久模型(下面的UserEntity)->领域模型(下面的User) 的映射转换,

也就是说 持久模型UserEntity 就应该暴露到下面这一层映射代码位置,仓储的实现是处于ddd中的基础设施层,不能泄漏到更上层的领域层,

@Repositorypublic class UserRepositoryImpl implement UserRepository{    @Autowired    private UserEntityRepository userEntityRepository;    public User getById(int userId)    {        UserEntity persistanceModel = userEntityRepository.GetById(userId);        User domainModel = new User (            persistanceModel.id,            persistanceModel.username);        return domainModel;    }}

转载于:https://my.oschina.net/buwei/blog/822973

你可能感兴趣的文章
去不去O,谁说了算?
查看>>
PHP防SQL注入和XSS攻击
查看>>
在SHAREPOINT共享文档库中启用版本控制功能。
查看>>
Http 代理工具 实战 支持网页与QQ代理
查看>>
又见尾递归
查看>>
安装PyGraphics
查看>>
【COCOS2DX-LUA 脚本开发之四】使用TOLUA++编译PKG,从而创建自定义类让LUA脚本使用...
查看>>
开源大数据周刊-第16期
查看>>
遥感图像分类现状及存在的问题
查看>>
Commons Logging存在的ClassLoader问题详解
查看>>
双向链表的操作
查看>>
Flume-ng 高级功能配置
查看>>
我的友情链接
查看>>
CRM技术发展历程
查看>>
编译安装LAMP(php-fpm)步骤详解
查看>>
2-Ceph运维
查看>>
深入浅出Linux设备驱动编程--定时器
查看>>
常见移动设备的 CSS3 Media Query 整理(iPhone/iPad/Galaxy/HTC
查看>>
java递归-迷宫求解
查看>>
ImageButton实现触屏监听
查看>>