Java 业务开发常见错误 100 例
朱晔
贝壳金服资深架构师
51940 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
代码篇 (23讲)
Java 业务开发常见错误 100 例
15
15
1.0x
00:00/00:00
登录|注册

答疑篇:设计篇思考题答案合集

你好,我是朱晔。
今天,我们继续一起分析这门课“设计篇”模块的第 21~26 讲的课后思考题。这些题目涉及了代码重复、接口设计、缓存设计、生产就绪、异步处理和数据存储这 6 大知识点。
接下来,我们就一一具体分析吧。

21 | 代码重复:搞定代码重复的三个绝招

问题 1:除了模板方法设计模式是减少重复代码的一把好手,观察者模式也常用于减少代码重复(并且是松耦合方式),Spring 也提供了类似工具(点击这里查看),你能想到观察者模式有哪些应用场景吗?
答:其实,和使用 MQ 来解耦系统和系统的调用类似,应用内各个组件之间的调用我们也可以使用观察者模式来解耦,特别是当你的应用是一个大单体的时候。观察者模式除了是让组件之间可以更松耦合,还能更有利于消除重复代码。
其原因是,对于一个复杂的业务逻辑,里面必然涉及到大量其它组件的调用,虽然我们没有重复写这些组件内部处理逻辑的代码,但是这些复杂调用本身就构成了重复代码。
我们可以考虑把代码逻辑抽象一下,抽象出许多事件,围绕这些事件来展开处理,那么这种处理模式就从“命令式”变为了“环境感知式”,每一个组件就好像活在一个场景中,感知场景中的各种事件,然后又把发出处理结果作为另一个事件。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 业务开发常见错误 100 例》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • 老师您好,一直想请教个问题:我们现在的项目目前正在将原来的老项目拆分为多个微服务,随之而来的一个就是分布式事务问题,一直没找到好的解决方案,请问老师您们是如何来处理分布式事务或者使用什么开源框架,能否提供几种选择。多谢老师!

    作者回复: 专栏不涉及架构,给你一个大方向: 分布式事务: - 数据库层面 2PC/XA(直接使用中间件,比如Seata) - 应用层 TCC(服务接口需要实现三接口) - 微服务场景:Saga模式(针对状态机建模) 数据库 + MQ的一致性: - 本地消息表 - 事务消息 涉及外部服务整体一致性: - 补偿 + 最终一致 - 以外部服务为主,内部服务为辅思想

    15
  • 程序员小跃
    我发现咱们专栏这个课后答疑挺有特色的,已经有好几期的课后答疑让我学到了很多,至少又进一步巩固了我学习的内容,给老师这个设计点赞

    作者回复: 有帮助就好

    4
  • 常惠源
    老师您好,可否说一下巨衫数据库中MongoDB数据的存储,是否可以应用在重要数据的存储上?

    作者回复: 巨衫那个JSON 存储应该不是 Mongodb,具体特性我不太清楚 建议除了 MySQL、Oracle、MSSQL 等主流的关系型数据库之外的数据库,在应用到重要数据之前,都应该三思,仔细做下评估

    1
  • J.Smile
    老师,线程池的监控有没有什么好的方式?

    作者回复: 非bean自己写组件监控或者通过javaagent实现 bean的话就简单了

    1
  • Michael
    老师,你好! redis集群模式下,根据模糊key删除缓存有什么好的办法?scan命令在集群下不行

    作者回复: https://paluch.biz/blog/162-iterate-over-all-keys-in-a-redis-cluster.html

  • 惘 闻
    "虽然 MongoDB 的写入性能较高,但复杂查询性能却相比 Elasticsearch 来说没啥优势;虽然 MongoDB 有 Sharding 功能,但是还不太稳定。因此,我个人建议在数据写入量不大、更新不频繁,并且不需要考虑事务的情况下,使用 Elasticsearch 来替换 MongoDB。" 老师最后一题从这句话看来只看到了MongoDB相对于ES查询没什么优势,没看到ES的优势在哪里,所以老师推荐ES的原因具体是ES哪些方面比MongoDB要好啊.存储稳定性更高和查询效率更好吗?
    2
    2
  • Joker
    把业务处理和保存 MQ 消息到本地消息表的操作,放在相同事务内处理。 这一步是指比如用户注册入库后把这个用户信息和消息一起记录到消息表,然后再controller层执行发送消息?
    1
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部