9.框架之上的业务分层

  1. 1.DDD中CQRS怎么体现,只看过对应的理论,但是不知道怎么用,听说阿里就是用DDD,有相关实践吗?
  2. 2.业务代码的复用要分层级吗,要根据依赖顺序来复用吗?
  3. 3.biz是什么?
  4. 4.dao 可以理解为就是操作数据库吗?定义一些数据映射算是dao层吗?
  5. 5.怎样避免循环引用?
  6. 6.“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决”,这句话的一种应用就是DIP,可以这样理解吗?
  7. 7.这个没太看懂,可以多讲讲吗?
  8. 8.什么叫云原生啊?
  9. 9.这些mock的工具 是啥原理
  10. 10.repository如果从mysql改到mongodb,mongodb没有事务,整洁架构的关于事务的应该怎么处理
  11. 11.我之前在使用DDD的时候,如果我一个service组合了好几个封装的repo层方法,但是要使用到数据库的事务,这个时候就很难实现,因为我不能在service层调用 dao开启事务,然后传进repo。
  12. 12.业务侧将存储层和业务逻辑层拆分成不同的微服务,然后存储层对外提供实体的CURD,这样还可以算做是ddd么,这样设计后业务逻辑如何与存储之间的数据解绑?
  13. 13.应用ddd是否对框架选择有要求,如果业务逻辑依赖框架的服务治理能力,要怎么应用。
  14. 14.在业务代码中,多级缓存是不是要建立多个Model, 比如:Mysql -> Redis的,相互依赖实现多级缓存,有没有更好的方式呢?
  15. 15.repo和依赖反转有什么区别?
  16. 16.monkeypatch的原理和应用场景是什么?我知道python的monkeypatch是替换执行python底层代码。go是怎么实现的?(借一下问题:所有mock的都一样么?)
  17. 17.一个领域是不是一个聚合呐?还有领域事件是不是用来管理聚合间的通信的。。
  18. 18.接问题14,比如 redis 只存两个字段,mysql 有十几个字段,这样可以在一个 struct 里面来搞定吗?
  19. 19.gomonkey 好像直接在mac 上有点问题

1.DDD中CQRS怎么体现,只看过对应的理论,但是不知道怎么用,听说阿里就是用DDD,有相关实践吗?

  • 在模块拆分那节课会讲
  • 阿里也不是每个模块都 DDD

2.业务代码的复用要分层级吗,要根据依赖顺序来复用吗?

  • skip,没太看懂

3.biz是什么?

  • logic
  • biz = business

4.dao 可以理解为就是操作数据库吗?定义一些数据映射算是dao层吗?

  • data access object
  • query from other system
  • dto

5.怎样避免循环引用?

  • 加一层
  • 放在一起

6.“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决”,这句话的一种应用就是DIP,可以这样理解吗?

  • dip => logic 加了一个 interface

7.这个没太看懂,可以多讲讲吗?

图片

  • 第一行判断repoInstance类型是否实现了OrderRepo接口;
    • 那为啥dao层中没有reciver name,直接调用dao的函数 不还是会引dao的包嘛?
      • 感觉就是没写全(但是我见过的基本上也会调包,生成repoInstance)
      • 示例代码有点问题。。

8.什么叫云原生啊?

  • google
  • 炒作,经验+k8s 新增加的工具、设计方式

9.这些mock的工具 是啥原理

  • mock: go generate, ast 分析

10.repository如果从mysql改到mongodb,mongodb没有事务,整洁架构的关于事务的应该怎么处理

11.我之前在使用DDD的时候,如果我一个service组合了好几个封装的repo层方法,但是要使用到数据库的事务,这个时候就很难实现,因为我不能在service层调用 dao开启事务,然后传进repo。

  • 跨聚合使用事务,那就得用最终一致性来做了,IDDD 给了一个同一个进程内跨聚合最终一致的方案
  • 思考事务要跨越聚合了,那我原来的聚合设计的是不是不太合理

12.业务侧将存储层和业务逻辑层拆分成不同的微服务,然后存储层对外提供实体的CURD,这样还可以算做是ddd么,这样设计后业务逻辑如何与存储之间的数据解绑?

  • dd 的搞法:业务流程一个系统、下面数据访问有一个平台;数据访问平台提供了所有外部数据访问的封装。
  • 和存储解绑,还是用 Repo pattern,把数据平台(SDK)当成 repo 的一种实现
    • 这样做了感觉会每层都有相同的实体,有时候内容是差不多,然后进行相互赋值,感觉不是很合理。。

13.应用ddd是否对框架选择有要求,如果业务逻辑依赖框架的服务治理能力,要怎么应用。

  • DDD 主要说的是业务层
  • 后面这个要看业务逻辑依赖了框架的哪些治理能力。。

14.在业务代码中,多级缓存是不是要建立多个Model, 比如:Mysql -> Redis的,相互依赖实现多级缓存,有没有更好的方式呢?

  • 这个是不是就是个命名问题,主存储流程,用到各种存储:groupcache,redis,mysql,只要把 repo 的 interface 实现了就行了

15.repo和依赖反转有什么区别?

  • 没区别。。就是存储相关的抽象对依赖反转的一个应用

16.monkeypatch的原理和应用场景是什么?我知道python的monkeypatch是替换执行python底层代码。go是怎么实现的?(借一下问题:所有mock的都一样么?)

  • function address
  • mprotect 解除内存页保护
  • mmap,把自己的函数写入到内存中
  • 然后在原来的 function address 位置写 jmp -> 自定义函数的汇编指令
  • unpatch -> []byte -> 写回去

17.一个领域是不是一个聚合呐?还有领域事件是不是用来管理聚合间的通信的。。

  • domain 是 problem space 里面的概念,讲的是公司从事的领域之类的,聚合是技术上的概念(solution space)。
    • 懂了,怪不得说领域划分需要架构师和领域专家一起讨论。。。
  • 最终一致就是要靠领域事件来做,跨聚合的通信除了 event 还有 rpc

18.接问题14,比如 redis 只存两个字段,mysql 有十几个字段,这样可以在一个 struct 里面来搞定吗?

  • 可以的吧
  • 会占内存啊

19.gomonkey 好像直接在mac 上有点问题


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 lihuanjie113@gmail.com

×

喜欢就点赞,疼爱就打赏