没有秘密,只有付出的汗水,而非魔法。
关键不是做一件事情做对,而是平衡多个方面来确保不出差错。有时它们是协同工作的,有时它们会相互制约。设计只是众多方面之一。即使最好的设计也无法帮助项目成功(例如因为它从未发布)。
我提出的第一个规则是:
1. 没有绝对的规则
这严格遵循“平衡众多方面”的原则。D.R.Y.、Y.A.G.N.I.等仅仅是指导性的,严格遵循它们不能够保证好的设计,如果完全依照字面意思遵从,它们可能会导致你的项目失败。
例如: D.R.Y. 是最基本的原则之一,但研究表明,当小代码片段被隔离出来时,由于前/后条件检查、错误处理和泛化到多个相关情况,其复杂性可能增加3倍或更多。因此,该原则需要削弱为“D.R.Y.(至少不要过度)”——何时以及何时不是很难把握的。
第二个规则并不常见:
2. 接口必须比实现简单
听起来太过平凡,以至于不太引人注意。然而,它有很多值得探讨的地方:
对象导向(OO)的前提是管理无法再使用结构化编程进行管理的程序大小。主要机制是封装复杂性:我们可以将复杂性隐藏在更简单的接口后面,然后忘记掉它。
接口复杂度包括文档、错误处理规范、性能保证(或其缺失),等等。这意味着例如通过引入特殊情况来减少接口声明并不是降低复杂度,只是一种搬弄。
3-N 这里是我放置其他大部分提及的内容,已经被解释得非常清楚了。
按照这些准则如何构建软件?
以上的指南有助于评估代码。不幸的是,没有固定的方法可以达到这个目标。“经验”意味着您对如何构建软件有很好的感觉,而且有些决策只是感觉不好。也许所有原则只是后来的理性化。
一般的路径是将系统分解为各种职责,直到每个单独的组件都能够管理。
虽然有正式的过程,但这些过程只是在工作中运作,因为“什么构成了一个良好的、隔离的组件”是一个主观的决定。但最终,我们就是为此而付费的。
如果你对整个系统有一个大致的想法,从这些部件中的任意一个开始作为种子,逐渐发展成一个“核心”,并不会错。自上而下和自下而上并不是对立的。
实践,实践,再实践。编写一个小程序,让它运行,修改需求,让它再次运行。你不需要过多地训练“变更需求”这部分,我们有客户来做这个。
项目后评审——即使是对于个人项目,也要尝试习惯它们。在完成后评估好坏。假设源代码被丢弃了——即不要把那次会议看作“应该修复什么?”
康威定律认为:“一个系统反映了构建它的组织结构。”这适用于我见过的大多数复杂软件,并且正式的研究似乎证实了这一点。我们可以从中得出一些信息:
- 如果结构很重要,那么你与之合作的人也很重要。
- 或者结构并不那么重要。没有一个正确的结构(只有很多要避免的错误结构)。
解释来源:https://dev59.com/6nRA5IYBdhLWcg3wvQhh#845984
SOLID原则意味着单一职责、开放/关闭、里氏替换、接口隔离和依赖反转原则。
关注点分离和K.I.S.S.原则在IT技术中也很重要。
D.R.Y.原则指的是“不要重复自己”,这意味着将重复的代码提取到单独的函数或类中,以减少代码的杂乱性和错误。