《程序员修炼之道》第五六章读书笔记
《程序员修炼之道》第五六章
第五章“宁弯不折”中作者强调了代码的解耦和灵活性,在面对系统变化、业务需求调整代码要能够随着变化做出调整而不是在面对需求变更时需要重构或者大范围修改代码。在商城系统升级项目的促销匹配模块中就采用作者提到的解耦原则,通过策略模式解耦多个促销匹配和计算优惠的逻辑。并且通过编写配置文件来精确控制每个促销的匹配先后顺序和是否生效。将促销规则独立为可组合的插件模块,系统就能在保持整体结构不变的前提下支持业务变化。比如这个季度会对商城系统再次进行优化,要求能够实现捆绑销售功能,就可以在不影响之前功能的基础上新增促销活动规则。系统中的组件应该像杂耍中的球一样彼此独立,而不是相互纠缠无法抛起。在变换式编程这一小节中,以往我们常常会用各种嵌套 if-else 写控制逻辑,耦合严重。其实我们可以将一些输入输出给单独抽离出来,依旧是在商城项目中保存各种活动促销配置会有很多参数校验如果通过if,else来控制则会导致有很多if-else的逻辑判断,最后我选择通过责任链的设计模式来精简我的代码,使得代码能够更加清晰,各种校验逻辑能够更加独立。
第六章“并发”我理解了并发真正的问题在于时域耦合和共享状态。打破时域耦合的观点让我收获良多,我们常常默认某个处理流程必须同步执行,比如下单流程中的座位锁定、入班、修改花名册、消息推送等。其实这些操作都是可以拆分的,比如修改花名册,消息推送等我们可以通过消息队列或者任务调度的方式来解耦处理流程,保证其他的业务尽可能独立于主流程,不影响主流程的执行。“共享状态是不正确的状态”我更是踩过坑,在CRM项目为了提高导出效率我使用了多线程来处理业务逻辑。其实有一个资源是共享,每个线程都有可能访问导致了脏数据的产生甚至于报错,然后我想到了对共享资源加锁,但是这样做又降低了效率。我们应该使用并发容器、不可变对象或“数据复制”来避免共享状态的产生,并发编程的关键不是“控制”,而是“避免”,不是控制线程依次访问共享资源,而是应该避免共享状态的产生。