阅读更多

50顶
2踩

研发管理

翻译新闻 3 条你必须知道的软件开发原则

2012-06-26 17:03 by 副主编 wangguo 评论(27) 有21788人浏览
在本文中将介绍3条重要的软件开发原则,你可能已经知道,也可能只知道其中一条。这些原则看似很简单,但实施起来会很难。无论如何,这些原则提供了一个管理复杂软件项目的强大的途径。当涉及到真实世界中的项目开发时,你会发现这些原则都是非常有用的。

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

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

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

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

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


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



实现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 Key Software Principles You Must Understand
  • 大小: 68.6 KB
  • 大小: 10.1 KB
50
2
评论 共 27 条 请登录后发表评论
27 楼 manatees 2012-06-29 09:42
貌似过于理论化
26 楼 Jarry-Zhen 2012-06-28 15:36
多谢楼主赐教!
25 楼 javaeyehoney 2012-06-28 13:57
24 楼 alanland 2012-06-28 13:37
学习了 。
23 楼 fgh2011 2012-06-28 12:26
很深奥啊 刚开始当组长 不知道这算不算管理 写代码少了
22 楼 幽灵线程 2012-06-28 10:41
说起来简单啊,实际中呢。。。
21 楼 shuaiji 2012-06-28 09:31
是啊,想的很好,但是实际应用很困难
20 楼 rwl6813021 2012-06-28 09:03
把简单的东西做复杂容易,但是要把复杂的东西做简单就很难了
19 楼 yawei 2012-06-27 22:38
allenny 写道
2和3不是差不多的意思么

不是,2说的是要简单直接,不要过度设计, 例如简单功能非要用复杂的设计模式完成。 3的意思是要控制规模,尽量避免加入不需要的功能。

2对开发人员很重要,而3说到的问题是设计产品时非常容易犯的错误,特别是在敏捷的情况下。

18 楼 haolx 2012-06-27 13:32
很赞同第一条和第二条
17 楼 jadethao 2012-06-27 13:09
简单需要一种境界的!
16 楼 allenny 2012-06-27 11:58
2和3不是差不多的意思么
15 楼 kittychina 2012-06-27 11:50
这就是窍门!
14 楼 facingSun 2012-06-27 11:10
真不错,想达到这个标准还有很长的路要走~~
13 楼 dream891117 2012-06-27 10:49
还要慢慢学习,初学者
12 楼 guozhen_168 2012-06-27 09:18
说的很好,特别是“适可而止”
11 楼 jstl1point0 2012-06-27 08:31
说的很对啊,深入人心。
10 楼 PetriNet 2012-06-27 00:38
英语不好,编程就如同结巴讲话
9 楼 guoxu1231 2012-06-26 23:54
以上3条是建立在大菊观基础上的, 否则容易陷入软件泥潭
8 楼 xyzhu 2012-06-26 22:37
三个原则的确不错。但实际项目中,真正的遵守或者整个项目能始终坚持的很少,尤其是经过后期维护的项目,需求变过,开发人员换过,这样的项目最终代码将会非常凌乱不堪。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 软件开发的7个原则

    软件开发的7个原则 1. 开闭原则 定义: 开闭原则(Open-Closed Principle, OCP)是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象...

  • 软件开发的七条原则

    原则 #1:The Reason It All Exists(它存在的原因) 软件系统存在的原因:为用户提供价值。所有的决定都应该考虑到这一点。...所有其他原则都以这一条为先。 原则 #2:KISS(Keep It Simple, Stupi...

  • 软件开发编程规范及原则

    希望你也加入到人工智能的队伍中来!http://www.captainbed.net/strongerhuang 我的网站:https://www.strongerhuang.com 我的知乎:https://www.zhihu.com/people/strongerHuang.com Ⅰ、写在前面 不...

  • 软件开发合同模板范本

    其它《软件开发合同模板范本》下载链接: https://download.csdn.net/download/daqiang012/10621400 合同编号:_________甲方(委托人):_________ 法定住址:_________ 法定代表人:_________ 职务:________...

  • 软件测试必须知道的精华总结

    4、根据软件开发瀑布模型,软件测试是开发后期的一个阶段 5、有时间就多测试一些,来不及就少测试一些 6、软件测试是非建设性的工作,甚至是破坏性的 7、测试中发现错误是对责任人工作的一种否定 软件开发模型 大棒...

  • 每个开发人员都应该知道的 10 大安全编码实践

    这是每个开发人员都应该知道的十种安全编码实践。它们一起可以减少错误并保护你的系统免受恶意活动的侵害。通过遵循这些约定,你可以帮助确保代码安全、保护你的公司并减少被攻击者利用的机会。

  • 【软件开发】软件开发注意事项

    软件开发注意事项     开发APP 80%的人都容易犯一些致命的错误: ◆以为做个软件很简单,所以描述需求的时候及其模糊。 ◆ 急着想要报价,在自己对需求不确定的时候就要报价。然后就按这个报价开始做。 ...

  • 【笔试题】嵌入式软件开发——嵌入式软件工程师经典笔试题

    从CSDN各个博客上摘选的一些容易做错的嵌入式软件的笔试题,做一下记录,让自己记住。 文章转自:嵌入式经典面试题。 1、用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 解答:这一...

  • 软件开发方法

    软件开发方法是一种使用早已定义好的技术集及符号表示习惯来组织软件生产的过程。包括:结构化的方法 、 Jackson方法、 面向对象开发方法、原型等等。1.结构化方法 指导思想是自顶向下、逐层分解,基本原则是功能...

  • 软件开发必修课:你该知道的GRASP职责分配模式

    简介:软件开发为什么需要职责驱动设计(RDD)?职责应该如何分配?如何结合架构模式在实际开发中实践落地?本文介绍一种通用的职责分配模式——GRASP,通过举例详解GRASP的几大原则,并分享两个实际运用的案例。...

  • 一些软件开发的原则

    以前本站向大家介绍过一些软件开发的原则,比如优质代码的十诫和Unix传奇(下篇)中所以说的UNIX的设计原则。相信大家从中能够从中学了解到一些设计原理方面的知识,正如我在《再谈“我是怎么招聘程序”》中所说的,一...

  • 软件测试的7个基本原则

    毕生所学,得到最重要的东西是一种以原则为基础的生活方式,是它帮助我发现真相是什么,并据此如何行动。

  • 敏捷软件开发:原则、模式和实践

    1,敏捷宣言和原则 1.1 敏捷宣言 ...虽然后者在软件开发中也具有其价值,但敏捷联盟认为,前者比后者更具有价值。这四点构成了敏捷最核心的要素,但我个人认为就这4点而言,最根本的还是“个人和交

  • 软件开发文档模板

    目录 1. 范围 2. 总体要求 2.1 总体功能要求 2.2 软件开发平台要求 ...3. 软件开发 3.1 软件的需求分析 3.1.1 需求分析 3.1.2 需求分析报告的编制者 3.1.3 需求报告评审 3.1.4 需...

  • 软件测试的八大原则

    在对软件测试行业有了初步的聊了解以后,对于初学者并不能急于学习...​ 也就是说我们的测试都是要根据客户的要来做,因为客户是花了钱的,而软件开发行业的所有岗位也都是围绕客户而展开工作的,如:软件开发工程师...

  • 软件开发模板

    转载:... 目录 ...2.2 软件开发平台要求 2.3 软件项目的开发实施过程管理要求 2.3.1 软件项目实施过程总体要求 2.3.2 软件项目实施变更要求 2.3.3 软件项目实施里程碑控制 3. 软件开

  • 软件项目开发流程以及人员职责,软件工程中五种常用的软件开发模型整理

    文章目录一、软件项目开发流程逻辑图开发流程需求分析概要设计详细设计编码测试软件交付验收维护软件维护软件升级软件项目开发流程以及人员职责软件工程中五种常用的软件开发模型整理软件系统开发流程七大详细步骤...

  • 敏捷的12条原则

    没有什么方法可以保证团队一定能开发出完美的软件,敏捷的团队也是同样地,所以,有一系列的原则来帮助敏捷团队。 最优先要做的是尽早、持续地交付有价值的软件,让客户满意。 欣然面对需求变化,即使在开发后期。...

  • 理解敏捷的价值观和原则

    敏捷宣言也称敏捷软件开发宣言,软件开发业的先辈们对以下四则价值观达成了一致: 个体和互动高于流程和工具 可工作的软件高于详尽的文档 客户协作高于合同谈判 响应变化高于遵循计划 **注:**下面是这份宣言的...

  • 原生js图片圆形排列按钮控制3D旋转切换插件.zip

    原生js图片圆形排列按钮控制3D旋转切换插件.zip

Global site tag (gtag.js) - Google Analytics