软件开发的核心原则

更新日期: 2022-05-27阅读: 592标签: 软件

软件设计有两种方式:一种是设计得极为简洁,没有看得到的缺陷;另一种是设计得极为复杂,有缺陷也看不出来。第一种方式的难度要大得多。

-- 《皇帝的旧衣》,CACM 1981 年 2 月 C.A.R. Hoare


引言

本文将介绍软件开发中的核心原则,这里与设计模式的七大原则不同。虽然众多的原则都早有耳闻,但是在开发过程中,却又常常忘记了这些原则,陷入开发的困境。本文再这里再将这些原则进行重新介绍一番,并带上自己的一些思考。


软件开发的核心原则


  • 原则一:Don't Repeat Yourself

  • 原则二:Keep it simple stupid

  • 原则三:You Ain't Gonna Need It

  • 原则四:Done is better than perfect

  • 原则五:Choose the most suitable things


DRY 原则

Don't Repeat Yourself,简称 DRY 原则,即不要重复自身,这是软件开发的一个 基础原则 。很好理解,在软件开发中不要做重复性劳动。也就是经常说的“不要重复造轮子”。

任何一个知识点在系统内部都应当有一个 唯一、 明确、权威的表述。这个原则又被称为“真理的单点性(Single Point of Truth)” 或者 SPOT 原则 。

重复会导致前后矛盾、产生隐微问题的代码,原因是当你修改重复点时,往往只改变了一部分而并非全部。通常,这也说明我们在软件设计中的代码的组织没有想清楚。

对去重的思考

设计过程中:常量、表和元数据只应该声明和初始化一次,并导入其它地方。通过,可以通过 重构 去除重复代码,更改代码的组织而不更改核心算法。

如果遇到重复数据无法避免,可以思考如下问题:

  • 函数封装:如果代码中含有重复数据是因为在两个不同的地方必须使用两个不同的表现形式,能否写个函数、工具或者代码生成程序,让其中一个由另一个生成,或两者都来来自同一个来源?

  • 文档或其他形式:如果文档重复了代码中的知识点,能否从部分代码中生成部分文档,或者反之,或者两者都来自同一个更高级的表现形式?

  • 头文件和接口:如果头文件和接口声明重复了实现代码中的知识点,是否可以找到一种方法,从代码中生成头文件和接口声明?

数据结构中也存在类似的 SPOT 原则:“ 无垃圾,无混淆 ”(No junk,no confusion)。

  • “无垃圾”是说数据结构(模型)应该最小化,比如,不要让数据结构太通用,居然还能表示不可能存在的情况。

  • “无混淆”是指在真实世界中绝对明确清晰的状态在模型中也应该同样明确清晰。

简言之,SPOT 原则就是提倡寻找一种数据结构,使得模型中的状态跟真实世界系统的状态能够一一对应。


KISS 原则

Keep it simple stupid,简称 KISS 原则。在做软件设计的工作中,很多时候都不要想得过于复杂, 也不要过度设计和过早优化 ,用最简单且行之有效的方案也就避免了复杂方案带来的各种额外成本。这样既有利与后续的维护,也有利于进一步的扩展。

思考:永远都不会知道用户会怎么操作,所以没有必要在软件开发中过度设计。


YAGNI 原则

You Ain't Gonna Need it:即 YAGNI 原则。只需要将应用程序必需的功能包含进来,而不要试图添加任何其他你认为可能需要的功能。因为在一个软件中,往往 80% 的请求都花费在 20% 的功能上。

思考:关注软件中的核心功能,功能越少,开发周期就会越短,才有更有立足于市场。


完成胜于完美

Done is better than perfect:在面对一个开发任务时,最佳的思路就是先把东西做出来,再去迭代优化。如果一开始就面面俱到,考虑各种细节,那么很容易钻牛角尖而延误项目进度。

这一点在工作中深有体会,每次拿到一个需求总是要能快速交付,给用户测试,能满足他们的需求比自己想到的完美更重要。

思考:“人无完人,金无足赤”,软件开发也是,先完成,再优化。


选择最合适的

Choose the most suitable things:这是在做方案选择、技术选型时候的一个很重要的原则。在面对许多技术方案、开源实现的时候,务必做到不能盲目求新,要选择最合适的而非被吹得天花乱坠的。

思考:技术层出不穷,日新月异,没有必要一味追求最前沿的技术,正确的事情就是针对特定的需求能够解决当前的问题。


链接: https://www.fly63.com/article/detial/11605

ManageEngine全球副总裁Sabhlok:通过简单易用的工具软件来优化IT 运维管理

人物简介:ManageEngine全球副总裁,获杜克大学福库商学院MBA学位。拥有超过20年的企业级软件行业经历,曾就职于Embarcadero、BMC等公司, 任技术、营销、销售与执行高级管理职位。十多年前,除了那些最大的公司外

时下流行的9种恶意软件,你都了解吗?

当今时代,网络世界处处充满了危机,对于网络用户来说,能够对各种类型的恶意软件进行了解,也许有助于在网上冲浪的过程中保全自身。病毒、蠕虫、木马、杂交程序和僵尸网络、勒索软件

软件开发行业应该有职业道德规范来约束吗?

在软件开发领域,经常会发生由于从业者的职业道德不到位而引发的事件,比如,InfoQ 过往就曾报道过离职程序员利用测试账户套现千万美元、华夏银行一位技术处长利用职务便利在华夏银行总行核心系统内植入计算机病毒程序

常用报表软件有哪些?

在企业管理过程中,报表往往都会通过一些简洁的图表方式,为大家呈现所有的数据。报表软件,可以在操作的过程中有效提升工作效率,所以有很多企业早就已经选择跟随信息技术的潮流,选择报表软件工具。

如何打造一款好软件?

糟糕的软件是世界上为数不多的无法用金钱解决的问题之一。数十亿美元的航空公司拥有的航班搜索应用程序往往不如学生群体开发的那些应用程序好用。尽管面临着拼车服务的威胁,世界各地的老牌出租车公司还在使用糟糕

如何在软件开发行业选择一条正确的职业道路?

当我进入软件开发领域时,我非常兴奋。我想要同时学习所有东西:游戏开发、移动开发、人工智能以及所有与之相关的内容。我把时间浪费在了写“hello world”和一些简单的程序上,使用了大约 30 种语言,只是为了弄清楚我应该学哪一种

如何应对软件复杂度

至今也写了四年多代码,但如何在功能不断增多的同时写出可读、可维护、可扩展的或者说优雅的代码一直令我感到非常困惑。最近读了《Clean Architecture》以及 Domain Driven Design(简称 DDD) 相关软件架构的书,对这个问题有了进一步的思考。

软件的复杂性正在杀死我们

现在有一个常见现象:企业想要更快更便宜地构建软件。这当然是一个可以理解和值得称赞的目标。且每个工程师都应该全心全意支持这个目标。

软件开发的七条原则

软件系统存在的原因:为用户提供价值。所有的决定都应该考虑到这一点。在指定系统需求之前,在关注系统的各个功能之前,在确定硬件平台或开发过程之前,问问自己以下问题:这是否能为系统真正增加价值?

关于软件开发你真正需要知道的几个事情

我之所以写这篇文章是因为有一个朋友最近决定跻身软件工程行业。我的这位朋友聪明,精力充沛,品貌兼优,又善于学习:每个人都认为这样的人才必将有一番作为。但是,在踏出第一步时,他依然有很多东西需要学习。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!