在本文中将介绍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
分享到:
相关推荐
在软件开发过程中,小图标(icons)扮演着至关重要的角色,它们不仅提升用户界面的美观度,还能有效地传达功能和操作指示。"软件开发各种小图标大全"这个资源集合了各种常用的图标,适用于多种类型的软件和应用。...
软件界面设计是软件开发过程中非常重要的一部分,它直接影响着用户的使用体验和软件的整体质量。好的软件界面设计不仅能提高用户的操作效率,还能减少用户的学习成本和使用成本。 本文档详细描述了软件界面设计的...
### 每个程序员都该知道的10大编码原则 #### 1. 偏执 偏执在编程领域中并非负面情绪,而是一种确保代码质量和可靠性的...通过遵循这些原则,不仅可以提高个人的技术水平,还能够为整个软件开发过程带来更大的价值。
### 61条面向对象设计的经验原则 面向对象设计(Object-Oriented Design,简称OOD)是软件工程中的一种常用方法论,它强调通过抽象、封装、继承和多态等特性来组织代码结构,实现软件模块化。下面将对61条面向对象...
- **原则**:派生类必须知道基类,基类不应该知道关于它们的派生类的任何信息。 - **解释**:派生类需要知道基类以进行继承,而基类不应该知道派生类的存在,以保持类之间的单向依赖关系。 #### 原则三十八:私有...
面向对象设计是软件开发中的核心思想,通过合理的设计原则可以构建出高效、可维护的代码。以下是基于给定的61条Java面向对象设计经验原则的详细解释: 1. 数据封装:类的数据成员应隐藏,仅通过公共接口访问,以...
面向对象设计的原则是软件开发中不可或缺的指导方针,它们旨在提高代码的可读性、可维护性和可扩展性。以下是对这些原则的详细解释: 1. 数据隐藏:类的内部数据应当是私有的,只能通过公共接口访问,以保护数据的...
软件构造是软件开发过程中的关键阶段,主要关注如何将设计阶段的抽象概念转化为具体的可执行代码。这一阶段涉及到多个方面,包括编码、模块化、复用、集成以及测试等。软件构造的目标是确保代码的可读性、可维护性和...
从给定的文件标题“61条编程经验”和描述“实用java编程经验,学习java有用的内容”,我们可以提炼出一系列重要的编程原则,尤其适用于Java语言的软件开发。这些原则不仅涵盖了面向对象编程的核心理念,还提供了实践...
计算机编程的24条法则是一组旨在提升编程质量和效率的准则,这些法则涵盖了软件开发的多个方面,包括异常处理、代码编写、测试、文档、优化和项目管理。下面是对每一条法则的详细解释: 1. **致命的异常中止决不...
以下是对给定文件中提到的61条面向对象设计经验原则的详细解读。 1. **数据隐藏**:所有的数据都应该被隐藏在其所属的类内部,即通过私有成员变量的形式存在。这样做可以防止外部直接访问和修改这些数据,确保数据...
用户界面设计是软件开发中至关重要的环节,因为它直接影响到用户的使用体验和软件的易用性。以下是基于提供的文件内容,关于用户界面设计原则的详细说明: 1. **易用性原则** - **明确性**:按钮命名需清晰易懂,...
该书汇集了来自众多国外软件开发领域专家的智慧和经验,包含了97条建议,旨在帮助程序员在日常工作中提升能力、避免常见错误并不断进步。 根据提供的内容信息,以下是一些书中可能包含的关键知识点和建议: 1. **...
具体方法是:1、在光栅尺软件或带光栅测试功能的软件中输入你已经知道的光栅的大约线数,设定栏数和幅度,生成光栅测试图。 2、光栅测试图用相纸打印出来(最好是用准备好打印图像的同一纸张和同一输出工具输出)。 ...
五卷书是按功能分类的,让侧重于某些特定编程领域(比如用户接口)的软件开发人员, 能够在特定的卷中获取特定的内容。通过这一途径,读者在查找Wi n d o w s编程某一方面内容时, 可以随手打开某一本参考书籍即可。...
│ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科...
“不要假设任何事情”是软件开发中的一个重要原则。这意味着在开发过程中遇到不确定的情况时,应该通过询问和验证来获取准确的信息,而不是凭空猜测。这种做法可以避免因误解而导致的问题和延误。 #### 7. 虚拟团队...