`

软件开发必知3条原则

 
阅读更多

在本文中将介绍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

分享到:
评论

相关推荐

    java开发面试笔试必知必会基础知识

    这些知识不仅涵盖了编程语言本身,还包括与之相关的数据库管理、软件工程原则以及软件测试方法。以下是对标题和描述中提到的一些关键知识点的详细解释: 一、数据库 1. Oracle 中的 LOB (Large Object) 数据类型:...

    105个软件开发常用图标PNG格式

    在软件开发过程中,图标设计是用户体验中的重要组成部分。PNG(Portable Network Graphics)格式因其无损压缩、支持透明度以及高质量的图像表现,被广泛应用于软件界面设计,特别是按钮和菜单等交互元素。本资源包...

    必知必会3

    【描述】:“必知必会3”可能是一个系列教程或者课程的第三部分,强调的是持续深化和扩展前面两个阶段的学习成果。在这一阶段,学员可能将深入到更具体的主题,例如深入理解数据结构与算法、学习使用高级编程特性、...

    软件图标软件开发适用ICO

    3. **软件开发中的应用**:在软件开发过程中,选择或设计合适的图标是用户体验的重要组成部分。开发者需要考虑图标在各种操作系统环境下的显示效果,包括高DPI屏幕、深色主题等。此外,图标还需要符合平台的设计规范...

    华为敏捷软件开发解读V1.01.ppt

    - **开发人员**:所有软件开发相关人员(包括PL、软件开发人员、软件测试人员等)需要深刻理解敏捷理念、掌握敏捷实践,并了解公司敏捷推行策略。全体相关人员需在2010年3月底前通过敏捷考试。 - **考试**:分为管理...

    软件开发合同模板.doc

    ### 软件开发合同关键知识点解析 #### 一、合同背景与基本原则 - **法律依据**:本合同依据《中华人民共和国合同法》及相关法律法规制定。 - **合作基础**:甲乙双方基于自愿、平等、互利互惠的原则签订本合同。 ...

    信息化项目管理中必知的原则要领.docx

    6. **创新项目管理体制**:对传统开发体制的挑战意味着需要建立一个全新的项目管理体制,确保企业能够充分利用平台软件的优势,构建出满足自身需求的信息系统。 7. **人才培养与专业化**:企业信息化设计建造师的...

    mysql必知必会ppt教程

    - 设计原则:遵循第三范式(3NF),减少数据冗余,提高数据一致性。 - 事务:一组数据库操作,必须全部成功或全部失败,确保数据的一致性。ACID属性包括原子性、一致性、隔离性和持久性。 通过这十个部分的学习,...

    软件开发常用素材图 ico,png

    在软件开发过程中,图标(ico)和PNG图像文件起着至关重要的作用。这些素材图是构建用户界面(UI)和增强用户体验(UX)的关键元素。本文将深入探讨ico和PNG这两种格式的特点、用途以及在软件开发中的应用。 ico...

    MySql必知必会

    1. **规范化理论**:学习数据库设计的基本原则,包括第一范式到第三范式的规范化过程。 2. **模式设计**:探讨如何创建高效且可维护的数据库模式,包括实体关系图(ER图)的设计方法。 3. **数据导入与导出**:教授...

    openssl编程必知必会

    总的来说,《openssl编程必知必会》将引导你深入理解加密和网络安全,掌握OpenSSL库的使用,从而提高你的软件安全开发能力。通过学习并实践书中内容,你将能够更好地应对网络安全挑战,为用户提供更加安全的服务。

    软件开发保密热门协议书.doc

    《软件开发保密热门协议书》是一份旨在保护企业软件开发过程中的商业秘密和技术秘密的法律文件。这份协议书中,甲方通常为企业,乙方则为员工或合作方,双方就专有信息的定义、保密义务、使用权限、例外情况、信息交...

    您不可不知的KISS原则——妙手回春ppt作品.rar

    在信息技术领域,KISS原则被广泛应用于软件开发、系统设计和项目管理中。它鼓励我们在面对复杂问题时,尽可能地简化解决方案,避免过度设计,降低理解和维护的成本。 【PPT设计中的KISS原则】 在制作PowerPoint...

    人月神话--软件工程书籍

    作者Brooks是IBM 360系统的主要设计师和项目经理,他的经验和洞察力为软件开发提供了深刻的见解。 在书中,Brooks提出了许多关键概念和观点,其中最为人所知的可能就是“人月神话”这个核心理念。他指出,将更多的...

    【合同大全】软件开发保密热门协议书.doc

    《软件开发保密热门协议书》是一份针对软件开发过程中涉及的商业秘密和知识产权保护的重要法律文件。该协议书中,甲方通常代表委托开发软件的企业或个人,而乙方则代表软件开发者或者服务提供者。以下是协议书的主要...

    银行业务基础,常用术语,必知必会

    在银行业务中,基础知识是软件开发人员理解和构建相关系统的关键。银行会计是银行业务的核心,它涉及资金的记录、计算和报告,对于确保金融交易的准确性和合规性至关重要。以下是一些关键的知识点: 1. **银行账户*...

    程序员必知的十大基础实用算法及其讲解

    它遵循深度优先的原则,尽可能深入地探索图的分支。DFS的时间复杂度为O(V+E),其中V表示顶点数,E表示边数。 **工作原理:** 1. **初始化:**选择一个起点,标记该点为已访问。 2. **探索:**访问当前节点的所有未...

    面向对象软件开发的十大原则

    火龙果软件工程技术中心 对于开发人员来说,时时回过头来检查一下应用程序是非常有用的。考虑一下这个应用程序是否达到了预期目的?是否遵循了最佳方案?要想实现目的是否还存在更好的方法?温故而知新,也许你会从...

Global site tag (gtag.js) - Google Analytics