【极客时间】设计模式之美

参考  极客时间 设计模式

一、设计模式学习导读:

代码评价标准:可维护性、可读性(符合编程规范)、可扩展性(开闭原则)、灵活性、简洁性(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

  1. 目录设置是否合理、模块划分是否清晰、代码结构是否满足“高内聚、松耦合”?
  2. 是否遵循景点的设计原则和设计思想:SOLD/DRY/KISS/YAGNI/LOD等?
  3. 设计模式是否应用得当?是否有过度设计?
  4. 代码是否容易扩展?如果要加薪功能,是否容易实现?
  5. 代码是否可以复用?是否可以复用已有的项目代码或类库?是否有重复造轮子?
  6. 代码是否容易测试?单元测试是否全面覆盖各种正常和异常的情况?
  7. 代码是否易读?是否符合编码规范(比如命名和注释是否恰当、代码风格是否一致?)

  如何发现代码质量问题-业务需求checklist

  • 代码是否实现预期的业务需求?
  • 逻辑是否正确?是否处理了各种异常情况?
  • 日志是否打印得当?是否方便debug排查问题?
  • 接口是否易用?是否支持幂等、事务等?
  • 代码是否存在并发问题?是否线程安全?
  • 性能是否有优化空间,如SQL、算法是否可以优化?
  • 是否有安全漏洞?如输入、输出校验是否全面?
原文地址:https://www.cnblogs.com/clarino/p/15666519.html