3 条必须知道的软件开发原则

标签: 程序员 开发原则 设计原则 软件开发 | 发表时间:2012-06-27 07:48 | 作者:齐哲
出处:http://blog.jobbole.com

在本文中将介绍 3 条重要的软件开发原则,你可能已经知道,也可能只知道其中一条。这些原则看似很简单,但实施起来会很难。无论如何,这些原则提供了一个管理复杂软件项目的强大的途径。当涉及到真实世界中的项目开发时,你会发现这些原则都是非常有用的。

原则1:不要重复自己(Don’t Repeat Yourself,DRY 原则)

这个原则非常重要,换言之,就是不要写重复的代码。

当你正在构建一个大型的软件项目时,你通常会被整体复杂性搞得不知所措。解决复杂性的最基本的策略是将系统分成若干个容易处理的部分。起初,你可能想将系统按组件划分,每个组件代表了一个子系统,其中包含了完成特定功能所需的一切。

组件还可以往下再分,这样复杂性将被降低到单一职责(single responsibility),每个职责可以使用一个类来实现,类包含了方法和属性。方法实现算法,这些算法和算法的子部分是构成软件业务逻辑的最小知识块。你只需要保证这些块不重复即可。

DRY 原则规定,在整个系统中,每一个小的知识块只可能发生一次,且每个知识块必须有一个单一、明确、权威的表征。

在一个完美的应用程序中,每一小块业务逻辑将被封装在一个表征中,也就是一个变量或一个类。变量被封装在一个能够被描述为一个职责表征的类中,类被封装在一个能被描述为功能表征的组件中。这种方式称为模块化架构,DRY 原则是其一个重要的部分。

3 条必须知道的软件开发原则

实现 DRY

你可以按照以下方式降低软件项目的复杂度,以便更容易地发现潜在的重复问题:

●绘制软件架构图,并映射主要的组件,复杂的项目可能需要为每个组件绘制一个专门的架构图。

●如果你到达了连接职责的层级,你可能需要转换到 UML 图。

●在写代码块之前,根据它在项目中的层级命名。定义它代表什么,并确定你知道它在组件中的作用。

●定义表征应该展示的内容(如功能是在数据库驱动程序中执行 SQL)以及应该隐藏的内容(如数据库认证信息)。

●确保表征不依赖于另一个复杂层级的表征(如一个组件依赖于另一个组件中的类)。

当你发现正写的代码与之前写过的代码类似或相同,你就需要花时间来考虑你正在做什么,并确保不重复自己。

原则2:尽量简单、一目了然(Keep it Simple Stupid,KISS 原则)

最简单的解释往往是最正确的。

这里的 Stupid 翻译为“一目了然”更好一些,简单并不意味着一目了然,比如“.(){..&};.”,够简单吧,但看懂这是什么吗?这其实是一个 bash 中的 fork 炸弹(不断 fork 一个新进程,耗尽系统资源)。

所以做到简单的同时,还要做到一目了然。你也可以这样理解,将一个软件做得连白痴都会用。这就是用户体验的最高境界了。

如何做到简单且一目了然呢?这要归结到软件开发的可维护性和可理解性。KISS 原则往往体现在需求设计阶段,当你考虑如何将客户的需求转变成一个可实现组件时,尝试确认以下部分:

●收益和努力比例不调的功能

●高度依赖其他功能的功能

●可能会变得复杂的功能

总而言之,如果一个任务看起来超复杂,试着去考虑一种创造性、独特的方式。多花时间去讨论关键点,看是否有其他更合适的方案。

原则3:适可而止(You Ain’t Gonna Need It,YAGNI 原则)

YAGNI 原则指的是只需要将应用程序必需的功能包含进来,而不要试图添加任何其他你认为可能需要的功能。

在一个软件项目中,往往 80% 的时间花费在 20% 的功能上。

3 条必须知道的软件开发原则

当你准备列出一个项目清单时,试着考虑以下问题:

●通过降低抽象的层级,来实现低复杂度

●根据特性将功能独立出来

●适度接受非功能性需求

●识别耗时的任务,并摆脱它们

这些原则看似简单,但在实际运作中,会有各种各样的问题出现。一旦你强迫自己应用这些原则,你会发现你距离创造一个完美的软件已经不远了。

英文原文: 3 Key Software Principles You Must Understand

相关文章

相关 [知道 软件开发 原则] 推荐:

3 条必须知道的软件开发原则

- - 博客 - 伯乐在线
在本文中将介绍 3 条重要的软件开发原则,你可能已经知道,也可能只知道其中一条. 这些原则看似很简单,但实施起来会很难. 无论如何,这些原则提供了一个管理复杂软件项目的强大的途径. 当涉及到真实世界中的项目开发时,你会发现这些原则都是非常有用的. 原则1:不要重复自己(Don’t Repeat Yourself,DRY 原则).

【外刊IT评论网】趣图图解SOLID软件开发原则

- - 外刊IT评论网
今天早上我发现了 Motivator这个工具. 下面就是我的首次尝试,以 SOLID软件开发原则为主题的具有启发意义的图片. 这图片都是从谷歌里搜索出来的,我“借用”了一下. 希望这些作品能给你带来一些快乐. 我已经把它们挂在了我们开发团队的办公室里了. (这张图片来自 Mark Nijhof.

在软件开发中应用80:20原则

- - CSDN博客研发管理推荐文章
本文来源于我在InfoQ中文站原创的文章,原文地址是:. Jim Bird是一位经验丰富的软件开发经理、项目经理与CTO,专注于软件开发与维护中疑难问题的解决、软件质量管理与安全领域. 在过去的15年间,Jim曾管理过团队建设与高性能的财务系统. 他的主要兴趣在于如何帮助小团队更有效地构建真正的软件:高质量、安全、高性能且易使用.

四件在我步入职业软件开发生涯那天起就该知道的事情

- - 外刊IT评论
我的软件开发生涯开始于大约15年以前. 但是直到最近5年,我才真正地看到它的提高. 下面这些事情,我希望在进入软件开发领域时我已经知道了. 如果我早点知道这些事儿,我将会变得更加成功. 软件开发中没有“正确的方式“. 在我开发生涯的早期,我在学习和争论上浪费了大量的时间. 我错误地认为,在软件开发的诸多方面都存在一种绝对”正确的方式“.

设计师应当知道的20大UI设计原则

- - 优设(UISDC)
清晰度是界面设计中,第一步也是最重要的工作. 要想你设计的界面有效并被人喜欢,首先必须让用户能够识别出它. 比如当用户使用时,能够预料到发生什么,并成功的与它交互. 有的界面设计得不是太清晰,虽然能够满足用户一时的需求,但并非长久之计,而清晰的界面能够吸引用户不断地重复使用. 2.界面是为促进交互而存在的.

软件开发的核心

- - 博客园_知识库
  「我们一直这样做开发,时间做久了,便忘了当初的本意.   有关软件系统开发,我们谈些什么.   我们谈过程,编码规范、开发流程、同行评审、结对编程、持续集成,从瀑布到敏捷再到极限编程.   我们谈架构,企业级、J2EE、容器化、SOA(面向服务架构)、Microservices(微服务化).   我们谈规模,大容量、高并发、大数据.

优秀设计师应当知道的20大UI设计原则

- - 雷锋网
清晰度是界面设计中,第一步也是最重要的工作. 要想你设计的界面有效并被人喜欢,首先必须让用户能够识别出它. 比如当用户使用时,能够预料到发生什么,并成功的与它交互. 有的界面设计得不是太清晰,虽然能够满足用户一时的需求,但并非长久之计,而清晰的界面能够吸引用户不断地重复使用. 界面的存在,促进了用户和我们的世界之间的互动.

[转载]优秀设计师应当知道的20大UI设计原则

- - 妖人团P团
原文地址: 优秀设计师应当知道的20大UI设计原则 作者: iveodesign. 清晰度是界面设计中,第一步也是最重要的工作. 要想你设计的界面有效并被人喜欢,首先必须让用户能够识别出它. 比如当用户使用时,能够预料到发生什么,并成功的与它交互. 有的界面设计得不是太清晰,虽然能够满足用户一时的需求,但并非长久之计,而清晰的界面能够吸引用户不断地重复使用.

软件开发的“三重门”

- - 酷壳 - CoolShell.cn
自从上次写了“ 程序员技术练级攻略” 以来,就觉得似乎还有很多东西没有谈到,但当时没有继续思考了. 而春节前有人问我,是做底层技术,还是做业务. 这问题让我思考了很多,不由自主地回顾了一 下我这十多年的软件开发经历,并顺着整理分类了一下自己解决过的若干问题,还发散想了很多,经过了一个春节假期的发酵,产生了下面这篇文章.

软件开发的人文关怀

- - 博客园_知识库
  几年前,我从温伯格的《技术领导之路》中学到一点:技术人员往往更喜欢和机器打交道,因为他们“认为”自己更适合和机器打交道;但是,优秀的技术人员必须(也必然)具备好的沟通能力. 所以,温伯格鼓励各位技术人员多加练习和其他人打交道的能力. 温伯格的这个观点我是非常赞成的,好的技术人员一定需要“勇敢”面对他人,不能被“自实现的预言”局限在机器的世界里.