软件设计的哲学:增加复杂度的12中危险信号

软件系统的设计和开发过程中,增加系统复杂性的12中危险信号:

危险信号1:浅层模块

浅层模块的接口相对于它提供的功能来说是复杂的。浅层模块在与复杂性的斗争中帮助不大,因为它们提供的好处(不需要了解它们内部如何工作)被学习和使用它们的接口的成本所抵消。小模块往往是浅层的。

危险信号2:信息泄漏

当在多个地方使用相同的知识时,例如两个不同的类都理解特定类型文件的格式,就会发生信息泄漏。

危险信号3:时间分解

在时间分解中,执行顺序反映在代码结构中:在不同时间发生的操作位于不同的方法或类中。如果在不同的执行点使用相同的知识,它就会被编码到多个地方,从而导致信息泄漏。

危险信号4:传递方法

透传方法是一种除了将其参数传递给另一个方法外什么也不做的方法,通常使用与透传方法相同的API。这通常表示类之间没有明确的责任划分。

危险信号5:重复代码

如果同一段代码(或几乎相同的代码)反复出现,这是一个危险信号,说明您没有找到正确的抽象。

危险信号6:特殊和通用的混合物

当通用机制还包含专门用于该机制特定用途的代码时,就会出现此警告。这使得机制更加复杂,并在机制和特定用例之间产生信息泄漏:未来对用例的修改可能也需要对底层机制进行更改。

危险信号7:联合方法

应该能够独立地理解每种方法。如果你不能理解一个方法的实现而不理解另一个方法的实现,那就是一个危险信号。此微信型号也可以出现在其他上下文中:如果两段代码在物理上是分开的,但是每段代码只能通过查看另一段代码来理解,这就是危险信号。

危险信号8:注释重复代码

如果注释中的信息在注释旁边的代码中已经很明显,那么注释就没有帮助。这方面的一个例子是,注释使用与它所描述的事物名称相同的单词。

危险信号9:模糊的名字

如果一个变量或方法名足够宽泛,可以引用许多不同的东西,那么它就不能向开发人员传递太多信息,底层实体更有可能被误用。

危险信号10:选择很难的名字

如果很难为创建底层对象的清晰图像的变量或方法找到一个简单的名称,那么这就暗示底层对象可能没有一个干净的设计。

危险信号11:难以描述

描述方法或变量的注释应该简单而完整。如果你发现很难写这样的注释,那就说明你所描述的东西的设计可能有问题。

危险信号12:不易理解的代码

如果不能通过快速阅读理解代码的含义和行为,这是一个危险信号。通常这意味着有一些重要的信息对于阅读代码的人来说不是很清楚。

原文地址:https://www.cnblogs.com/peida/p/12148088.html

时间: 2024-08-30 00:16:53

软件设计的哲学:增加复杂度的12中危险信号的相关文章

2020荐书:软件设计的哲学

2020年必读书籍推荐:软件设计的哲学(A Philosophy of Software Design),本书190多页,豆瓣的点评分在9分以上,目前只有英文版本,中文版还未上市,英文好的同学建议去直接阅读原版. 内容简介 书中讨论了软件设计的主题:如何将复杂的软件系统分解成可以相对独立实现的模块(如类和方法).这本书首先介绍了软件设计的基本问题,即管理复杂性.然后讨论了如何处理软件设计过程的哲学问题,并提出了在软件设计过程中应用的一系列设计原则.该书还介绍了一系列标识设计问题的危险提示.你可以

软件设计的哲学:第四章 深度封装模块

目录 4.1 模块化设计 4.2什么是接口? 4.3 抽象 4.4 深度模块 4.5浅模块 4.6 类拆分 4.7示例:Java和Unix I/O 4.8 结论 管理软件复杂性最重要的技术之一是系统设计,这样开发人员在任何时候都只需要面对总体复杂性的一小部分.这种方法称为模块化设计,本章介绍其基本原理. 4.1 模块化设计 在模块化设计中,软件系统被分解成一系列相对独立的模块.模块可以采用多种形式,例如类.子系统或服务.在理想的情况下,每个模块都完全独立于其他模块:开发人员可以在任何模块中工作,

软件设计的哲学:前言

01 前言 80多年来,人们一直在为计算机编写程序,但令人惊讶的是,关于如何设计这些程序或什么是好程序的讨论却少之又少.关于软件开发过程(如敏捷开发)和开发工具(如调试器.版本控制系统和测试覆盖工具),已经有了相当多的讨论.还广泛分析了编程技术,如面向对象编程和函数式编程,以及设计模式和算法.所有这些讨论都是有价值的,但是软件设计的核心问题在很大程度上仍然没有触及.David Parnas的经典论文“关于将系统分解成模块的标准”发表于1971年,但是在随后的45年里,软件设计的技术水平并没有超过

软件设计的哲学 第五章 隐藏信息

目录 5.1 信息隐藏 5.2 信息泄漏 5.3 时间分解 5.4示例:HTTP服务器 5.5 示例:类太多 5.6 示例:HTTP参数处理 5.7 示例:HTTP响应中的默认值 5.8 隐藏在类中的信息 5.9 不要过度隐藏 5.10 结论 第四章论述了模块的深度.本章以及随后的几章将讨论创建深度模块的技术. 5.1 信息隐藏 实现深度模块最重要的技术是信息隐藏.这种技术首先由David Parnas描述.基本思想是每个模块应该封装一些知识,这些知识表示设计决策.该知识嵌入到模块的实现中,但不

软件设计的哲学: 第十章 定义不存在错误

目录 10.1 异常增加复杂性的原因 10.2 例外情况太多 10.3 定义不存在的错误 10.4 示例:在Windows中删除文件 10.5 示例:Java子字符串方法 10.6 屏蔽异常 10.7 异常聚合 10.8 事故? 10.9 设计不存在的特殊情况 10.10 做过了头 10.11 结论 异常处理是软件系统中最糟糕的复杂性来源之一.处理特殊情况的代码天生就比处理正常情况的代码更难编写,而且开发人员经常在定义异常时没有考虑如何处理它们.本章讨论了异常对复杂性的不成比例的贡献,然后展示了

软件设计的哲学:第十一章 两次设计

目录 设计软件是困难的,所以你对如何构建一个模块或系统的最初想法不太可能产生最好的设计.如果您为每个主要的设计决策考虑多个选项,您将得到一个更好的结果:设计两次. 假设您正在为GUI文本编辑器设计管理文件文本的类.第一步是定义类将呈现给编辑器其余部分的接口:与其选择第一个出现在脑海中的想法,不如考虑几种可能性.一种选择是面向行的接口,它具有插入.修改和删除整行文本的操作.另一个选项是基于单个字符插入和删除的接口.第三种选择是面向字符串的接口,它可以跨行操作任意范围的字符.你不需要确定每种选择的每

软件设计的复杂度

http://blog.csdn.net/horkychen/article/details/45381743 什么是软件设计的复杂度 软件技术发展的使命之一就是控制复杂度(Complexity).从高级语言的产生,到结构化编程,再到面向对象编程.组件化编程等等.关于复杂度的定义并不一致,想要详细了解的可以读读The Many Faces of Complexity in Software Design. 英文中Complex和Complicated有着微妙的不同.但总结起来,软件复杂度偏负面意

软件设计的思想与哲学

以下是从比较经典的书籍中摘录了的几条跟软件设计相关的原则和思想,这些思想不仅可以帮助你在设计软件.编写代码时有用,而且正如Mike Gancarz的<Linux/Unix设计思想>的译者序的作者漆犇所说"如果用"武侠"来作一个类比,这本书就好像是一部教你修炼内功的秘笈,无论新手老手,修炼基本内功都是一件必须持之以恒甚至可以毕生研习的事情,而同时我们也要知道,有时候优秀程序员和普通程序员水平差距的关键也正在于此". 摘自Robbins和Beebe的<

Tcl 和 Raft 发明人的软件设计哲学

John Ousterhout(斯坦福大学教授,Tcl 语言.Raft 协议的发明人...真的是超级牛人,Title 好多好多,这里就列几个大家熟悉的),在 Google 做了一次演讲,题目就叫 「A Philosophy of Software Design」.首先,John 问了大家一个问题,什么是计算机科学里最重要的事情?下面有回答 Abstration 的,有回答 Complexities 的,有回答 Testing 的.他还问了 Donald Knuth(高德纳,程序员应该都认识吧),