软件编写和设计中的18大原则

软件编写和设计中的18大原则写在这里,自己经常看一看。作者Diggins是加拿大一位有25年编程经验的资深技术人员,曾效力于Microsoft和Autodesk,并创办过两家赢利的互联网公司。

下面的13和14合起来也被称作Shy原则。

  1.避免重复原则(DRY - Don’t repeat yourself)

  编程的最基本原则是避免重复。在程序代码中总会有很多结构体,如循环、函数、类等等。一旦你重复某个语句或概念,就会很容易形成一个抽象体。

  2.抽象原则(Abstraction Principle )

  与DRY原则相关。要记住,程序代码中每一个重要的功能,只能出现在源代码的一个位置。

  3.简单原则(Keep It Simple and Stupid )

  简单是软件设计的目标,简单的代码占用时间少,漏洞少,并且易于修改。

  4.避免创建你不要的代码 Avoid Creating a YAGNI (You aren’t going to need it)

  除非你需要它,否则别创建新功能。

  5.尽可能做可运行的最简单的事(Do the simplest thing that could possibly work)

  尽可能做可运行的最简单的事。在编程中,一定要保持简单原则。作为一名程序员不断的反思“如何在工作中做到简化呢?”这将有助于在设计中保持简单的路径。

  6.别让我思考(Don’t make me think )

  这是Steve Krug一本书的标题,同时也和编程有关。所编写的代码一定要易于读易于理解,这样别人才会欣赏,也能够给你提出合理化的建议。相反,若是繁杂难解的程序,其他人总是会避而远之的。

  7.开闭原则(Open/Closed Principle)

  你所编写的软件实体(类、模块、函数等)最好是开源的,这样别人可以拓展开发。不过,对于你的代码,得限定别人不得修改。换句话说,别人可以基于你的代码进行拓展编写,但却不能修改你的代码。

  8.代码维护(Write Code for the Maintainer)

  一个优秀的代码,应当使本人或是他人在将来都能够对它继续编写或维护。代码维护时,或许本人会比较容易,但对他人却比较麻烦。因此你写的代码要尽可能保证他人能够容易维护。用书中原话说“如果一个维护者不再继续维护你的代码,很可能他就有想杀了你的冲动。”

  9.最小惊讶原则(Principle of least astonishment)

  最小惊讶原则通常是在用户界面方面引用,但同样适用于编写的代码。代码应该尽可能减少让读者惊喜。也就是说,你编写的代码只需按照项目的要求来编写。其他华丽的功能就不必了,以免弄巧成拙。

  10.单一责任原则(Single Responsibility Principle)

  某个代码的功能,应该保证只有单一的明确的执行任务。

  11.低耦合原则(Minimize Coupling)

  代码的任何一个部分应该减少对其他区域代码的依赖关系。尽量不要使用共享参数。低耦合往往是完美结构系统和优秀设计的标志。

  12.最大限度凝聚原则(Maximize Cohesion)

  相似的功能代码应尽量放在一个部分。

  13.隐藏实现细节(Hide Implementation Details)

  隐藏实现细节原则,当其他功能部分发生变化时,能够尽可能降低对其他组件的影响。

  14.迪米特法则又叫作最少知识原则(Law of Demeter)

  该代码只和与其有直接关系的部分连接。(比如:该部分继承的类,包含的对象,参数传递的对象等)。

  15.避免过早优化(Avoid Premature Optimization)

  除非你的代码运行的比你想像中的要慢,否则别去优化。假如你真的想优化,就必须先想好如何用数据证明,它的速度变快了。

  “过早的优化是一切罪恶的根源”——Donald Knuth

  16.代码重用原则(Code Reuse is Good)

  重用代码能提高代码的可读性,缩短开发时间。

  17.关注点分离(Separation of Concerns)

  不同领域的功能,应该由不同的代码和最小重迭的模块组成。

  18.拥抱改变(Embrace Change)

时间: 2024-10-10 09:30:48

软件编写和设计中的18大原则的相关文章

挖财首席架构师王福强:架构设计中的6大关键点

编者按:要开发出用户满意的软件并不是件容易的事,软件架构师必须全面把握各种各样的需求.权衡需求之间有可能的矛盾之处,分门别类地将不同需求一一满足.在UPYUN Open Talk 第二期"移动时代互联网金融架构趋势"的技术分享中,挖财首席架构师王福强带来了<挖财的互联网金融技术探索>,王福强重点分享了当前挖财架构设计中的6大关键点: 1. 系统层级分离 从大的体系来讲,挖财主要在做四个纬度的事情,第一个是会员中心,挖财有一套自己的会员体系,第二个是现金流,第三个是风控中心,

从游戏演进的角度谈近期游戏设计中的10大趋势

转自:http://gamerboom.com/archives/95163 与所有艺术形式一样,电子游戏也会随着时间的推移而演变并在这个过程中受到各种趋势的影响.当然,新的趋势和概念也会不断涌现. 在本篇文章中,我列举出了近几年最有趣/最流行的10种趋势. 趋势一:全民游戏 游戏设计中最主要的趋势是“扩大可访问性”.任天堂Wii和DS的巨大成功再加上休闲游戏的兴起,使得电子游戏在公众意识中迅速膨胀,因此也涌入了一大批新玩家. 目前市面上的许多热门游戏都带有新手教程,玩法简单的游戏也再次流行了起

优秀程序设计的18大原则

1.避免重复原则(DRY - Don’t repeat yourself) 编程的最基本原则是避免重复.在程序代码中总会有很多结构体,如循环.函数.类等等.一旦你重复某个语句或概念,就会很容易形成一个抽象体. 2.抽象原则(Abstraction Principle ) 与DRY原则相关.要记住,程序代码中每一个重要的功能,只能出现在源代码的一个位置. 3.简单原则(Keep It Simple and Stupid ) 简单是软件设计的目标,简单的代码占用时间少,漏洞少,并且易于修改. 4.避

 实用10大原则:网页UI设计全适用!

本文和大家分享的主要是网页ui设计中的10大原则,一起来看看吧,希望对大家设计中有所帮助和启发. 1.纠结的时候,让自然为你做决定! 遵循自然规律的设计总是因为贴近万物本源而受到更多人的宠爱,因此,当你举棋不定的时候,你可以选择将设计代入大自然定律中,让自然为你做出最好的决定.比如,现实和自然告诉我们,光源来自天空,在人们也已经习惯了这种由上至下光线来源的时候,设计师需要做的应该是能顺应用户视线的光线设计. 2.脱离色彩诱惑,能真正看清布局设计 色彩对人类视觉的冲击力能产生最大的效果:一个网页的

当今Web设计中存在的5大争议 ,你怎么看?

在 Web 空前繁荣的今天,有关 Web 设计中的各种观点很多会成为话题,有的很快达成一致,有的则一直争议下去,本文讲述 Web 设计中的 5 大经典争议,这些争议从它们诞生的那天起,就被正反两方争得不亦乐乎. 争议之一:链接是否应该在新窗口打开 正方: 外部链接应该始终从新窗口打开,当你浏览一个站点的时候,点击了一个链接,却被带到另外一个站点,你在这个站点的会话也因此丢失,这实在令人恼怒. 因此,站点内的链接可以在现有窗口打开,而站点外链接则应该在新窗口打开. 反方: 作为 Web 设计师,我

软件设计6大原则

1.开闭-原则:对于一个软件实体(类,模块,函数等)来说,应该可以扩展,但不可以修改. 对于扩展是开放的(Open for extension),对于更改是封闭的(Closed for modification). 2.单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因. 软件设计就是要发现职责并且把这些职责相互分离,如果你可以想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责,就应该考虑类的职责分离. 3.迪米特法则 4.里氏代换原则 子类必须能够替换掉其父类. 例

产品设计中要考虑6大类优先级

设计中对优先级的把握就是要让我们能够将真正重要的功能/内容/元素放到突出的位置,以最多的界面资源去展示它们,而将次要的部分弱化,隐藏起来,在此的部分索性砍掉.这是产品在设计中最容易忽略的地方,也是初级产品在优化和设计用户界面时,容易犯的错误.至于和怎么排放按钮,整理功能的方法.我之前有篇文章已经写了. 删除.组织.隐藏.转移,四个方法做好产品的"简单化设计" .那我们在设计中要考虑哪些优先级呢?共分为以下6类. 1.用户优先级 我们都知道用户按照操作经验维度可以分为:主流用户群体/随意

数据库设计中常见表结构的设计技巧(转)

一.树型关系的数据表 不少程序员在进行数据库设计的时候都遇到过树型关系的数据,例如常见的类别表,即一个大类,下面有若干个子类,某些子类又有子类这样的情况.当类别不确定,用户希望可以在任意类别下添加新的子类,或者删除某个类别和其下的所有子类,而且预计以后其数量会逐步增长,此时我们就会考虑用一个数据表来保存这些数据.按照教科书上的教导,第二类程序员大概会设计出类似这样的数据表结构: 类别表_1(Type_table_1) 名称 类型 约束条件 说明 type_id int 无重复 类别标识,主键 t

软件开发生命周期中测试的使用情况

软件开发的生命周期主要包括以下的阶段: 1.问题定义. 2.可行性研究. 3.需求分析. 4.概要设计. 5.详细设计. 6.编码和单元测试. 7.综合测试. 8.软件维护 以上就是一个软件开发的完整生命周期,能比较明显的看出,到详细设计为止,之前的阶段很少涉及到测试的环节,从编码实现开始,测试就开始贯穿之后的阶段,编码实现中,用的最多的就是单元测试,编码人员或测试人员主要通过一些测试用例来检测编写的代码块是否实现了所需要的功能,但是单元测试中又分为黑盒测试和白盒测试,黑盒测试是不知道内部的详细