极客时间已完结课程限时免费阅读

期末测试 | 有关DDD的内容,你掌握了多少呢?

期末测试 | 有关DDD的内容,你掌握了多少呢?-极客时间

期末测试 | 有关DDD的内容,你掌握了多少呢?

你好,我是欧创新。
《DDD 实战课》这个专栏已经完结有段时间了,很庆幸啊,依然能收到很多留言,与我交流技术。为认真学习的你点赞,也很感谢你的支持!
为了让你更好地检测自己的学习成果,我特意做了一套期末测试题。题目共有 20 道,满分为 100 分,快来检测一下吧!
分享给需要的人,Ta购买本课程,你将得18
生成海报并分享

赞 16

提建议

上一篇
抽奖|《DDD实战课》沉淀成书了,感谢有你!
 写留言

精选留言(20)

  • colin_fu
    2020-09-15
    欧老师好 很高兴从您的课上学到很多东西,我目前所做的项目采用了ddd的设计思想去实现,但是现在有个问题,我的po和entity还有dto中有大量的字段是重复的,然后过不去代码的重复率规定,但是以我的理解entity在ddd里面就是与之对应的po的超集 dto就是entity属性的集合或多个entity汇总,我不知道这样的理解是不是准确,想请老师解惑。

    作者回复: 是的,你的理解没有问题。定义这么多对象的目的就是为了实现各层的解耦,通过对象转换,保证领域模型逻辑不会受前端或者资源层逻辑的影响。设计的时候要尽量避免对象转换带来的性能损失。

    共 2 条评论
    3
  • Hans
    2020-08-01
    学完了,考试100分,但是业务分析感觉比较生疏,需要多加练习实践。

    作者回复: 非常不错。建议多看几遍,真正理解设计思想和设计流程后,再去落地。

    2
  • gen_jin
    2020-06-08
    学完了,考试90分,但还是不会事件风暴,具体怎么操作呢?

    作者回复: 你可以参考第18节的实例,找几个项目团队的小伙伴,找一个小的业务领域,从场景分析开始,提取领域对象,找到聚合根,构建聚合,然后划分限界上下文,完成微服务拆分和设计。然后参考加餐代码示例,设计微服务的分层架构代码目录,完成微服务详细设计和开发。 大致流程就是这样的。事件风暴的过程你可能比较陌生,多看几遍,理解一下它每一步的主要目标是什么?对你领域建模时有帮助的。

    1
  • 清涧飞鸟
    2020-05-22
    80分,学得不精,期待老师再出一些相关的课程!

    作者回复: 祝贺,已经很不错了哈。建议多看几遍,加深理解。

    1
  • 肥猫不开心
    2022-10-06 来自四川
    虽然我是满分,但是我感觉我还是不会。。
  • 小八哥
    2022-02-20
    这个周末,两天多,很快就浏览完了。还需要参照样例花大量时间来实践。
  • Leric
    2021-10-30
    有一道题目是关于如何实现依赖反转的模式,repository不能代表所有外部依赖吧,感觉应该是六边形架构里的适配器模式吧
  • 若若
    2021-08-25
    感谢欧老师的分享,非常的专业,讲解非常清晰。我也是在做保险软件这块,正如您所说保险领域非常复杂,在实施这块的时候我也是深有同感。有个问题向您咨询一下 比如我们在分析保险理赔的定核损模块,定损需要从其他厂商(如精友等)导入配件数据,导到保险公司以后又可以根据实际情况对配件的价格进行修改。我们分析将定损单作为一个聚合,那定损配件整体(若干车辆损失换件组成)肯定是跟定损有关的领域对象。现在对这个领域对象是定义成实体,还是值对象这块傻傻分不清,内部也是有些争议。争议点在于,如果定义成值对象,这里导入数据后涉及修改配件数据,而不是做整体替换(系统内也没有针对配件管理相关的功能,都是现导现用);假如定义实体吧,又觉得实体缺少一些行为,只是一些数据。如果这块我描述的清楚的话,还请有时间帮忙指导一下。非常感谢!
    展开
  • Simple
    2021-07-02
    对子域和限界上下文得理解: 1.根据欧老师得回答,子域属于粗划分,子域一开始可能按照业务流程或者功能模块粗分,如果采用事件风暴以后确定了限界上下文边界,会不会存在之前得模块划分不合理。也就是开始粗分和战术设计推导最终推导出来得不一致。 2.也有相关书籍提到子域和限界上下文是不同视角或者维度得产物,不用强拉他们进行比较,就好比问一个主任医生和一个高级工程师哪个厉害一样,没有对比性,也不用强拉着去比较,不知道这种说法是否成立。 请知道得老师或朋友阐述下自己得观点。
    展开
  • Simple
    2021-07-01
    https://time.geekbang.org/quiz/score?sheet_id=270337&source=1220004
  • Simple
    2021-07-01
    95分,谢谢欧老师
  • 大维
    2020-12-07
    欧老师,在实际物理部署时, 子域是作为物理单元部署吗? 如子域A的S1访问子域B的S2服务,是通过 S1-->S2 还是 S1-->子域B网关-->S2呢?

    作者回复: 子域还是偏业务概念的,这个还在DDD的战略设计阶段。 我们在子域内开展事件风暴,划分出限界上下文,并根据限界上下文设计出微服务后,微服务才是物理单元的部署。当然有的子域可以划分出多个限界上下,也可能是一个限界上下,如果是一个限界上下文,那它就是部署单元。 不同微服务之间的服务访问现在一般都是通过API网关来实现。

  • Hans
    2020-08-01
    https://time.geekbang.org/quiz/?act_id=137&exam_id=295&source=1220004

    作者回复: 厉害!

  • Hans
    2020-08-01
    老师学完你的课程,我存在如下疑问: 1. dto转化为do时,do是采用聚合根,还是可以是实体、值对象以及其他的对象吗? 2. 如果在应用服务层存在聚合交互时,如果聚合根内部的数据满足其他聚合的要求,难道为了解耦,其他聚合还从仓储层重新获取一遍数据吗? 3. 聚合的领域返回的响应对象, 可以是实体、值对象或聚合根吗,如果存在聚合根,必须是聚合根吗? 4. 值对象可以理解为数据表中没有专属uuid的实体的附加信息表结构吗? 谢谢.
    展开

    作者回复: 1、都可以的,要根据应用层和领域层在业务逻辑处理需要什么样的DO对象,需要什么对象就转换成什么类型的对象。 2、在应用层进行跨聚合操作时,如果需要获取其它聚合的对象的数据,需要通过聚合根ID来访问其他聚合,这是其它聚合的聚合根会找到对应对象,然后返回数据,当然这个数据的初始化是通过其它聚合的仓储来完成的。 3、这个聚合是其它聚合吗?其它聚合不一定返回聚合根,返回实体和值对象也是可以的,根据你需要的数据来定,也可以临时定义一个对象。 4、值对象更多的体现领域模型的概念,它更强调描述和值的属性,在数据模型中一般不建议设计成独立的数据表,除非有基于值对象的查询要求。

  • hk
    2020-06-30
    老师你好,问下你们在用DDD构建微服务的同时,在具体战术实施过程中,有没有用到其他的辅助技术,比如工作流、状态机等

    作者回复: DDD战术设计主要设计领域对象,做好聚合和服务分层等方面的设计,目前还没有用到您说的这些辅助技术。

    共 2 条评论
  • ...
    2020-05-28
    还有个问题请教下,最近在项目实践中试了试,遇到一些问题,如果是websocket一类的项目,其实各层都需要拿到websocket客户端对象与客户端通讯,为了实现洋葱模型那种从外到内的依赖关系,把websocket客户端包装成接口解决了这个问题;但如果是同步的http请求,内层返回的复杂数据结构,应该还是把数据模型定义在内层吧?(比如domain返回给application层的)这样才能依旧是从外到内的依赖关系?

    作者回复: 你说的数据模型是不是指PO?PO与基础层的数据库结构是一一对应的。同时还有领域层DO的领域模型,DO和PO会有映射关系。一般我们暴露给前端的是DTO对象,它是由多个DO组合而成的。

    共 2 条评论
  • ...
    2020-05-28
    老师,遇到点疑惑,像是带有数据库事物的复杂逻辑,应该怎么设计比较好呢?这个事物对象要在application层管理生命周期么?那如果domain层的entity需要根据事物的成功与否决定是否更新,怎么设计比较优雅呢?

    作者回复: 同一个微服务内,跨聚合的数据库事务在应用服务中控制就好了,或者采用事件总线的模式,保证不同聚合数据的最终一致性。

    共 2 条评论
  • 沉迷学习Zzz
    2020-05-25
    老师你好,我现在在开发DDD中遇到了一些疑惑,比如说现在有一个场景,调查问卷,和调查问题提交,我将调查问卷和调查问卷提交数据统计分别以聚合的方式拆分,现在用户填写调查问卷在提交的时候,在应用层中先需要调用问卷领域服务判断问卷是否过期,判断问卷是否过期的结果校验是写在应用层,还是下层到问卷提交的领域服务中实现。希望老师能给出解答。

    作者回复: 一般来说业务规则的校验都是在领域层完成的。是否过期的校验属于业务规则校验,这种校验需要聚合内实体数据进行配合,所以应该放在领域层。

  • 高阳路人
    2020-05-22
    75分,有一题单选不小心点错了。掌握不够好,还要再学一遍。谢谢老师的精彩课程。老师什么时候出新专栏,很期待。

    作者回复: 也还不错呢,多看几遍,理解的会更深刻。近期在准备一本书,等好了再告诉大家哈。

  • Martin
    2020-05-22
    题出的很好,在课文中没有明确定义,或者我没有细看到的,在题目中解答了我部分疑惑。 比如:拆分微服务的依据我一直以为是限界上下文,但我在实践过程中发现聚合之间也是解耦的,理论上也是可以拆分成微服务的。 题目中说到:理论上一个限界上下文就可以设计为一个微服务;聚合在领域模型中是一个最小的业务逻辑单元,它也是可以拆分为微服务的最小单元。
    展开

    作者回复: 是的,但是大多是基于限界上下文,不建议对聚合过度拆分,除非非常有必要。