参考 极客时间 设计模式
一、设计模式学习导读:
代码评价标准:可维护性、可读性(符合编程规范)、可扩展性(开闭原则)、灵活性、简洁性(KISS原则)、可复用性、可测试性;
实现方式:
1)通过继承、多态写出可复用代码;
2)编程规范:可读性好代码;
3)设计模式、基于接口而非实现、里氏替换原则等,实现可复用、灵活、可读性好、易扩展、易维护代码;
4)持续重构提升可维护性
设计原则:
SOLID:
DRY:Don't Repeat Yourself.
KISS:Keep it Simple,Stupid
YANGI:
LOD:
设计模式:
创建型:常用(单例,工厂方法,抽象工厂、建造者模式)+ 原型模式
结构型:常用(代理,桥接、装饰)+ 不常用(适配器, 门面、组合、享元)
行为型:常用(观察者、模板、策略、职责链、迭代器、状态) + 不常用(访问者、备忘录、命令、解释器、中介)
面向对象、设计原则、设计模式、编程规范、代码重构,都是保持、提高带啊质量的方法论。
P07: 哪些代码设计看似面向对象,实际面向过程?
1、滥用getter、setter
默认使用lombok等生成所有属性的get和set,会使得不应该外部访问的属性被外部错误修改,错误样例如下
1)商品的价格的totalPrice应是由ShoppingCart中addIte(ShoppingItem)计算,而不应该对外暴露setTotalPrice。
2)错误暴露list类型成员变量的get方法,从而外部获取该list后,可对该list进行add或clear
2、滥用全局变量和全局方法:讲Constants和Util按功能拆分(FileUtils、StringUtils等),避免修改时周边依赖要进行重新编译时间长
3、定义数据和方法分离的类,即贫血模型开发模式
审视代码checklist: Lesson34
如何发现代码质量问题-常规checklist
- 目录设置是否合理、模块划分是否清晰、代码结构是否满足“高内聚、松耦合”?
- 是否遵循景点的设计原则和设计思想:SOLD/DRY/KISS/YAGNI/LOD等?
- 设计模式是否应用得当?是否有过度设计?
- 代码是否容易扩展?如果要加薪功能,是否容易实现?
- 代码是否可以复用?是否可以复用已有的项目代码或类库?是否有重复造轮子?
- 代码是否容易测试?单元测试是否全面覆盖各种正常和异常的情况?
- 代码是否易读?是否符合编码规范(比如命名和注释是否恰当、代码风格是否一致?)
如何发现代码质量问题-业务需求checklist
- 代码是否实现预期的业务需求?
- 逻辑是否正确?是否处理了各种异常情况?
- 日志是否打印得当?是否方便debug排查问题?
- 接口是否易用?是否支持幂等、事务等?
- 代码是否存在并发问题?是否线程安全?
- 性能是否有优化空间,如SQL、算法是否可以优化?
- 是否有安全漏洞?如输入、输出校验是否全面?