目录

1、资源库与领域服务的区别?

2、按照DDD写代码是否会导致过度设计?

3、DDD是否战略设计的意义要大于战术设计?

4、模型驱动设计和面向数据库表的设计有什么区别?数据驱动的缺点是什么?为什么要使用DDD?即使不用DDD,而是面向数据库表开发,也能搭建一套稳定的代码结构。

5、为什么要用充血模型?


1、资源库与领域服务的区别?

  • 资源库与领域服务似乎起到的是同一个作用,聚集下方的资源提供给上层调用,这两个有什么实际区别?
  • 资源库与领域服务的区别其实就是仓库和服务窗口的区别,仓库是存取物品,而服务窗口是处理业务的;仓库只包含实体的读写和查询功能,把具体的业务逻辑放在仓库中实现是不合理的,例如:对于银行领域而言,你不能用银行账户的资源库来实现两个账户之间的转账。而领域服务是无处安放的业务逻辑,例如:当需要为系统引入营销功能,即给特定用户提供优惠的折扣,此时计算折扣的逻辑放在实体或值对象是不合适的,当然,更不能放在仓库当中,所以需要使用领域服务来承载这段业务逻辑。

2、按照DDD写代码是否会导致过度设计?

  • 按照DDD写代码的话似乎对编码的要求与系统理解更复杂了,一个业务是由多个领域对象同时分担处理,要是此时项目紧急加人进来做新业务,完全无法了解这些领域对象究竟具体提供了哪些服务,有一种系统被过度设计的感觉;
  • 其实,DDD的一个重要目标就是避免过度设计,如何避免过度设计?代码跟随业务走,而不是让程序员自由发挥;
    • 如何代码跟随业务走?按照领域专家的描述建立模型,且团队中所有人都能理解认可;
    • 系统被过度设计的感觉?业务逻辑复杂度不高,对性能和并发要求比较高,甚至可能都不需要领域专家的参与;
    • DDD与设计模型/面向对象不一样,它的出现只是为了辅助业务复杂系统的分析和设计,并不是解决所有的代码结构的设计问题,这也可以说是DDD的局限性之一。

3、DDD是否战略设计的意义要大于战术设计?

  • 答案:不是。
  • 的确,战略设计的推行(领域拆分/划分限界上下文)更容易,其他人并不知道你划分的合不合理,似乎也不影响代码编写;虽然架构设计有其艺术性,但归根结底是工程领域的事情,你的划分还需要验证;战略设计与战术设计的界限并不是那么清晰,例如:一般认为寻找聚合是战术设计,但是聚合同时能指示出限界上下文的边界,划分限界上下文的正确性往往能从聚合上得到印证,甚至可以先找聚合再划分限界上下文;
  • 根据事件风暴建模法的建模涡流模型,战术设计中如果发现战略设计不合理,那么就要重新修改战略设计;
  • 如果换种说法,DDD在架构设计阶段的意义是否要大于编码阶段?答案是肯定的。

4、模型驱动设计和面向数据库表的设计有什么区别?数据驱动的缺点是什么?为什么要使用DDD?即使不用DDD,而是面向数据库表开发,也能搭建一套稳定的代码结构。

  • 我理解DDD就是一套方法论,一个作用是用于拉齐项目中各个角色对于需求的认知,高效率的让项目中涉及的“知识”在团队内流转,这个是战略设计的作用;另一个作用就是将战略设计划分的领域模型,通过使用战术设计的各种“武器”,比如实体、值对象、仓储层、防腐层等等,将领域模型落地成高度抽象且领域层稳定的代码;
  • 数据驱动设计是依赖于底层设施(关系型or非关系性数据库?);面向数据库表开发,可能会导致两种情况:
    • 在后续代码设计中,程序员为了赶时间/偷懒,直接根据表结构来设计领域模型,或者尽量使领域模型向表结构靠拢, 这种情况完全背离了DDD的模型驱动设计的原则,并且使业务代码被底层(指数据存储方案)的技术实现绑架;
    • 即便使用数据驱动设计,在代码层的设计中,有经验的程序员也能做出合理的、接近DDD效果的设计——引出另一个话题:方法论到底重不重要?理论的作用有两点:
      • 好的结果可重现,可复制;
      • 提供一种能够提前对你的设计做出评估的方法。
    • 对于重要的项目而言,需要提前对设计的合理性进行评估,DDD就提供了这么一套思想框架:
      • 让更多的人设计出相对合理的架构;
      • 能提前对所设计的方案进行评估,避免在架构落地之后才发现不能适应业务的变化,从而产生巨大的损失。

5、为什么要用充血模型?

  • 如果业务足够简单,贫血模型没有任何问题;
  • 如果业务太过复杂,包含大量的业务活动,且需要大量人力一起协作,此时使用贫血模型的风险就比较大,因为贫血模型破坏了对象的封装性,每一个属性都可以独立设置,在复杂的业务中,不同的开发在开发不同的业务流程时,可以分别、自由的对同一个对象中的不同属性或相同属性进行设置,那么这时就很容易导致对象数据的不一致,业务逻辑出现问题且不易排查。

DDD的常见问题、争论以及局限性相关推荐

  1. 人类繁荣的数学:数学的哈欠

    Mathematics for Human Flourishing 人类繁荣的数学 为什么数学实践往往不符合我们的理想和希望?为什么驱使我们去做数学的深刻的人类主题被引导去构建一个更加美丽和公正的世界 ...

  2. 人工智能能否复制人脑引争论 美媒:目前AI仍存在局限性

    来源:网易智能 摘要:人们应用人工智能技术(AI)的所有领域,包括无人驾驶汽车.机器人医生.超过10亿中国公民的社会信用评分系统等,当前都取决于一场关于如何让AI做其不能做的事的辩论. 8月6日报道称 ...

  3. 谈谈SQL Server高可用的常见问题

    谈谈SQL Server高可用的常见问题 每次谈到SQL Server的高可用,很多的DBA,特别是SQL Server DBA心里一痛:因为大家都认为SQL Server无法或者很难实现SQL Se ...

  4. 数字集成电路面试常见问题_关于空间级集成电路的常见误解

    数字集成电路面试常见问题 对集成电路辐射硬度的常见误解 (Common misconceptions on the radiation hardness of integrated circuits) ...

  5. DDD+中台+微服务,yyds

    随着业务的发展,每个产品都需要对应数量的开发者作为支撑,但在长期的协作中,我们发现开发团队都会遇到一些普遍难点:构建速度慢.开发测试周期长.协作困难等. 在快速的业务迭代中,各团队的开发人员往往只会将 ...

  6. 一文理解 DDD 领域驱动设计!

    来源丨SpringForAll社区 2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Softwa ...

  7. 面试官:谈一下你对DDD的理解?我:马什么梅?

    领域模型(domain model)是对领域内的概念类或现实世界中对象的可视化表示.领域模型也称为概念模型.领域对象模型和分析对象模型. --<UML和模式应用> 我们在日常开发中,经常针 ...

  8. 一文盘点深度学习13个常见问题(附详细解答amp;学习资源)

    作者:VIDHYA小组 翻译:陈之炎 校对:顾佳妮 本文共4700字,建议阅读10+分钟. 本文为你解答关于入门深度学习的问题,并列出了大量的资源让你起步学习. 概述 从Facebook的研究到Dee ...

  9. 【Oracle RAC+DG实验】Oracle RAC+ASM+DataGuard配置实验记录+常见问题

    [Oracle RAC+DG实验]Oracle RAC+ASM+DataGuard配置实验记录+常见问题 1.环境规划: ---RAC环境介绍(primary database)            ...

最新文章

  1. Javascript s02
  2. 这种「基友」给我来一打!
  3. 最后一天,最后一刻。。。。。。情理之中,意料之外。。。。。。
  4. VTK:IO之ReadCML
  5. wpf控件提示Value ‘’ can not convert
  6. 提的最多的数据库“索引”,先来简单了解一下
  7. 本地缓存Caffeine
  8. Webpack实战(二):基础配置入门 - webpack-dev-server的介绍与用法
  9. 在SQL Server中导入和使用CSV文件
  10. C# DataSet和DataTable详解
  11. IIS 发布之后 您要找的资源已被删除、已更名或暂时不可用。 404.0 解决方法
  12. Java匹马行天下之 Java国出了个Java——举国欢庆
  13. Java高级工程师必备技术栈
  14. 前端视频截图的方法canvas.drawImage()
  15. xp+WinDBG+VMware调试内核
  16. 文件服务器如何异地备份,实战演示如何进行异地自动备份数据库
  17. android 让手机震动,Android手机震动的设置步骤
  18. 总结:参加第二届网络信息服务国际学术会议有感
  19. 《计算机软件基础》实验一
  20. 简书爬ajax接口获取csrf,Python爬取简书主页信息

热门文章

  1. AVS3中的AMVR和EMVR
  2. 敏涵·精致遮暇乳打造“新国妆”专场 致力新锐品牌强势“出圈”
  3. FAT16文件系统简介
  4. 互联网摸鱼日报(2023-01-21)
  5. oracle ppt讲义,oracle课件.ppt
  6. 8086CPU内部结构
  7. Vue的安装及使用教程【超详细图文教程】
  8. 数据分析案例-往届世界杯数据可视化
  9. idea各种中文乱码问题
  10. gets,gets_s,fgets函数