- 程序员的工作就是把人类语言的需求转化成计算机语言,就要按照计算机的思维来做。因此程序员要思路清晰,有扎实的编程基础,有优秀的抽象能力,这样才能写出优秀的代码。
- 局部性原理
- 时间局部性
- 空间局部性
- 缓存
- 抽象
- CPU与指令集
- 磁盘与文件
- 数据共享与数据库
- 应用层的MVC
- 日志工具的Logger、Formatter、Appender
- 分层
- 计算机网络七层协议
- Web三层结构
- 分而治之
- 异步调用及回调
- AJAX
- Node.js与Nginx
- 事件/消息/通知/订阅
- 用于解耦,避免多模块之间产生复杂的调用关系,也就同时帮助让代码更清晰,避免陷入调用链。
- 这方面有点类似message queue的作用,各个模块只订阅自己关心的消息,让代码和逻辑更加直白,免得一个消息传来传去,还可能需要通过人进行间接通知,逻辑过于复杂。这样就相当于把一个调用链的每一步都拆成了多个单独的事件,可以用不同的事件定义和命名,更清晰,更职责分离。
- 不管WPF桌面程序还是Angular前端程序,都经常用到。
- 有的是模块间直接的消息传递(如Angular中父组件通过事件绑定通知子组件,子组件通过Subject属性通知父组件),有的是通过一个公共服务来管理(如Angular中在一个公共service中管理EventEmitter,然后需要知道该事件的所有模块都去订阅它)。
- 用于解耦,避免多模块之间产生复杂的调用关系,也就同时帮助让代码更清晰,避免陷入调用链。
- 链式调用
- 封装的类的方法的返回值类型都是本类,那么就可以按顺序一直调用类中定义的各个函数了
- Web自动化测试
- 页面类
- 把各个页面抽象成类,类中包含一些各个页面特有的操作(如等待某个元素多久,点击某个按钮)
- 也可以继承自一个基类,包含一些基本/通用的方法/逻辑实现(如查找元素的方法,执行脚本,滚动页面,等待loading结束等)。
- 这部分可以放在逻辑代码中,可以不属于测试代码(比如spring,可以放在main下面,而不是test下面)。
- 测试类
- 可以调用前面抽象出的页面类。
- 测试类肯定就要放在测试代码目录下面了(比如Spring中的test目录)
- 使用一些断言
- 页面类