设计模式(十)反模式

根据《Python设计模式(第2版)》一书的学习,记录下来的笔记。本篇博客是反模式,是指程序设计过程中不应该做的。

Posted by K4ys0n on March 20, 2020

前言

反模式不同于设计模式,它是说明软件设计或开发的时候不应该做什么,换言之,应该尽量避免的事。

1. 反模式简介

软件设计有一些不良设计的主要表现:

  • 不动性:以这种方式开发的应用程序非常难以重用。
  • 刚性:以这种方式开发的应用程序,任何小的修改都会导致软件的太多部分必须进行相应的改动。
  • 脆弱性:当前应用程序的任何更改都会导致现有系统变得非常容易崩溃。
  • 粘滞性:由于架构层面的修改非常困难,因此修改必须由开发人员在代码或环境本身中进行。

反模式是处理重复出现问题的某些解决方案的后果,是应用软件中常见的有缺陷的过程和实现。

2. 反模式的分类

  • 软件开发反模式
  • 软件架构反模式

3. 软件开发反模式

意大利面条式代码:代码错综复杂,非常难以维护和优化。影响如下:

  • 结构的重用性将会降到最低。
  • 维护工作量过高。
  • 进行修改时,扩展性和灵活性会降低。

金锤:由于某个解决方案(技术、设计或模块)在多个项目中效果不错,所以就把它推广到其他场景,但不管其是否适用,一锤子搞定所有,那就 是金锤。影响如下:

  • 痴迷于一个解决方案,并把它应用于所有软件项目。
  • 不是通过功能,而是通过开发中使用的技术来描述产品。
  • 没有满足需求,造成与用户的预期不符。

熔岩流:这个反模式与死代码或一段用不到的代码有关,人们怕修改了会影响到其他东西就一直留着,最终固化了。熔岩流的症状如下:

  • 开发的测试工作(如果完成的话)具有很低的代码覆盖率。
  • 代码中含有莫名其妙的注释。
  • 过时的接口,或开发人员需要围绕既有代码展开工作。

复制粘贴式编程:不考虑代码是否最大程度地优化,不考虑是否适合场景,直接复制粘贴使用。后果如下:

  • 多个软件应用程序存在同种类型的问题。
  • 维护成本会更高,同时bug的生命周期也会变得更长。
  • 较少的模块化代码库,相同的代码会散落在多处。
  • 继承问题。

4. 软件架构反模式

重新发明轮子:是指架构层面上的。之前已经针对一个问题提出了架构级的方案,再次遇到类似的问题又要重新设计方案,这没有必要。后果 如下:

  • 解决一个标准问题的解决方案太多,许多方案考虑并不周全。
  • 耗费工程团队更多的时间和资源,导致预算超标,上市时间延后等。
  • 封闭的系统架构(仅适用于一种产品的架构)、重复劳动和糟糕的风险管理。

供应商套牢:产品公司依赖于供应商提供的某些技术,这些技术与系统密不可分,导致系统很难摆脱。后果如下:

  • 该产品是围绕该技术而不是根据客户要求开发的。
  • 产品上市时间不可靠,不能满足客户的期望。

委员会设计一群人在一起设计特定的系统,所得到的软件架构通常是复杂的或不合格的。症状如下:

  • 开发人员和架构师之间的观点冲突,即使设计完成后依旧如此。
  • 过于复杂的设计,很难记录。
  • 规格或设计的任何改动都需要经过多次审查,导致延迟。

后记

小结一下:

  • 反模式的定义。
  • 反模式的两种分类:软件开发反模式、软件架构反模式。

设计模式暂时就到这里,接下来想整一点web安全、Linux编程基础和算法,可能会穿插着写吧。