原则#1:存在的原因
软件系统存在的原因:为用户提供价值。所有的决定都应该考虑到这一点。在指定系统需求之前,在关注系统的各个功能之前,在确定硬件平台或开发过程之前,问问自己以下问题:这是否能为系统真正增加价值?如果答案是否定的,那就不要去做。所有其他原则都以这一条为先。
原则#2:KISS
软件设计不是一个偶然的过程。任何设计工作都需要考虑许多因素。所有的设计应该尽可能简单,但不要过于简化。
复杂性是你的敌人。任何傻瓜都能让事情变得复杂。反之则很难。
——Richard Branson
这有利于拥有更易于理解和易于维护的系统。但并不是说应该以简单的名义抛弃功能,甚至是内部功能。当然,通常而言,更优雅往往意味着更简单。
简单是终极的复杂。
——Leonardo Da Vinci
简单也并不意味着快速和肮脏。事实上,为了简化,我们经常需要大量思考和多次迭代工作。收获是更易于维护且不易出错的软件。
这一直是我的一个座右铭——集中和简单。简单或许会比复杂更难;你必须花很多力气使自己的思维变得简单、有条理。
——Steve Jobs
原则#3:维护愿景
明晰的愿景对于软件项目的成功至关重要。否则,项目最终基本上都将陷入左右摇摆的境地。没有概念的完整性,系统就很有可能成为不兼容设计的拼凑物——被错误的螺丝钉连接在一起。
概念完整性是系统设计中要考虑的最重要因素。
——Fred Brooks
建立一个干净的内部结构对构建一个易于理解、可扩展和重组、并且可维护和可测试的系统而言至关重要。
——Stroustrup
只有清晰认识系统架构,才有可能发现常见的抽象和机制。利用这种通用性最终将使得系统更简单,因此也会更轻巧、更可靠。
- Grady Booch
妥协软件系统的架构愿景会削弱并将最终破坏系统,甚至是设计得尽善尽美的系统。拥有一个能够实现愿景和执行合规性的授权架构师有助于确保软件项目的成功。
原则#4:生产其他人消费的东西
很少有工业级的软件系统是在真空中构建和使用的。其他人将以某种方式,或者其他依赖于能够理解系统的方式使用、维护、记录。因此,始终指定、设计,以及实现了解他人将有助于了解你在做什么。任何软件开发产品的受众都可能很大。
指定用户。设计,牢记实施者。关注那些必须维护和扩展系统的代码。有的人可能需要调试你编写的代码,这使得他们成为你的代码用户。方便他们工作可以为你的系统增添价值。
原则#5:面向未来
寿命较长的系统具有更大的价值。在今天的计算环境中,当规格在刹那间发生变化并且硬件平台过几个月就变得过时时,软件寿命常常用月来衡量而不是用年。然而,真正的工业级软件系统必须能坚持更长时间。要做到这一点,系统必须能够适应这些改变。可以成功实现这些目标的系统都是从一开始就以这种方式而设计的。切勿在设计时自找麻烦。总是问“假使这样,那会怎么样”,并通过创建解决一般问题,而非仅仅是具体问题的系统来准备好所有可能的答案。这很可能促使整个系统的重用。
滥用这个原则是我看到很多开发者出错的地方。拥有多年的经验和其中许多人致力于单个项目的好处之一是你可以了解YouArentGonnaNeedIt的优点。作为开发者,除非我们也是该领域专家,否则我们经常会猜错系统将如何改变。
系统确实发生了变化,但通常会殊途同归,因而广义的解决方案就变成了包袱。
——Sal Mangano
原则#6:预先规划重用
重用可节省时间和精力。实现高水平的重用可以说是开发软件系统最难的目标。代码和设计的重用已被宣称为使用面向对象技术的主要优势。但是,这项投资的回报并不是自动的。为了利用面向对象编程提供的重用可能性,我们需要预先考虑和规划。在系统开发过程的每个级别都有很多技术可以用来实现重用。详细设计和代码级别的重用技术不但众所周知而且是有文档的。
新的文献正在以软件模式的形式寻觅设计的重用。然而,这只是战斗的一部分。与组织中的其他人交流重用的机会至关重要。如何重用你不知道的东西?提前规划重用可降低成本并提高可重用组件及其所在系统的价值。
原则#7:三思而后行!
这最后一条原则可能是最容易被忽视的。在行动之前形成一条清晰和完整的思路几乎总能够产出更好的结果。只有你考虑到了某个问题,你才更有可能解决它。你还可以从中获得有关如何再次正确做这件事的知识。
如果你确实考虑到了某件事情,但仍然做错了,那么这就是你宝贵的经验。思考还有一个成果是可以学习到当你不知道某个东西,此时该如何研究答案的过程。
明确的思想进入到系统,就会产出价值。应用前六个原则需要深入的思考,当然潜在的回报也是不可估量
1
为您推荐
前言本篇博文来自一次公司内部的前端分享,从多个方面讨论了在设计接口时遵循的原则,总共包含了七个大块。系卤煮自己总结的一些经验和教训。本篇博文同时也参考了其他一些文章,相关地址会在后面贴出来。很难做到详..
现在有一个常见现象:企业想要更快更便宜地构建软件。这当然是一个可以理解和值得称赞的目标。且每个工程师都应该全心全意支持这个目标。然而事与愿违。虽然并非是故意的,但是随着时间的推移,我们会因为软件构建中..
我之所以写这篇文章是因为有一个朋友最近决定跻身软件工程行业。我的这位朋友聪明,精力充沛,品貌兼优,又善于学习:每个人都认为这样的人才必将有一番作为。但是,在踏出第一步时,他依然有很多东西需要学习。我和..
前言这是我《回顾我的开发经历》系列的第二篇,聚焦于我与代码生成器的故事。从最初的简单工具到最终演变成一个功能强大的ORM框架,这段经历不仅让我在技术上得到了极大的提升,也让我深刻理解了重构、设计模式和系..
随着科技的飞速发展,计算机领域成为了一个充满机遇和挑战的领域。对于计算机这个行业,我一直有着浓厚的兴趣,这份兴趣驱使我不断学习,不断成长。在这篇文章中,我将分享我的编程经历以及一些建议,希望能够给那些..
虚拟机软件是现代计算机中必不可少的工具之一,它可以让我们在一台计算机上运行多个操作系统,这为开发人员、测试人员以及研究人员带来了很多便利。在这里,我们将探讨四款最强大的桌面虚拟机软件:VMware Workstati..
在充满活力的技术领域,创新是至高无上的,有一种方法已获得显著的吸引力——开源软件。开源软件凭借其透明、协作和无限可能性的精神,彻底改变了我们开发、共享和定制应用程序的方式。从操作系统到数据分析工具,其..
RustDesk是一款轻量级且易于使用的远程桌面控制软件,与ToDesk、TeamViewer、AnyDesk等类似软件一样简单易用。它无需任何配置,使用方便,特别适合远程办公、远程教学或演示以及远程协助和技术支持等情况。RustDesk..
RustDesk 是一个用 Rust 编程语言开发的开源远程支持软件。它允许用户在 Windows、Linux 和 macOS 等操作系统上建立远程连接,以进行技术支持或协助。RustDesk官网:https://rustdesk.com/RustDesk下载地址:https:/..
好用的桌面虚拟软件有以下几个:VMware WorkstationVMware Workstation官网:https://www.vmware.com/products/workstation-pro/workstation-pro-evaluation.htmlVMware Workstation 是 VMware 公司推出的一款桌面虚..
需求在Windows中使用C#做软件开发,有时候需要获取当前系统中已安装的软件及其版本号,接下来就简单介绍一下,如何通过C#获取来实现。示例代码已安装的软件,在注册表中都会有软件信息和卸载信息,我们只需要扫描注..
在JavaScript设计模式中,有五个重要的设计原则,它们有助于编写可维护、可扩展和易于理解的代码。这些设计原则通常被称为SOLID原则,分别是:单一职责原则(Single Responsibility Principle - SRP):一个类应该只..
如果您在 Ubuntu 上安装软件包时遇到“E:无法找到软件包”错误,请不要担心,因为修复它很容易。要点定期更新软件包列表,以维护安全且最新的 Ubuntu 系统,确保访问最新的软件包、安全补丁、错误修复和改进的依赖..
软件开发生命周期(SDLC)是指从需求分析到软件部署、运维及更新的全过程。它通常包括以下阶段:1、需求分析开发团队与客户合作,明确软件的功能和需求。通过收集、分析和确认需求,确保开发团队对软件的目标有清晰的..
问题描述在Linux使用dpkg安装软件包出现错误,但使用dpkg -l命令,可以看到软件包已经被安装了,此时,如果想要卸载掉这个软件包,使用dpkg --remove命令就会提示“该软件包现在的状态极为不妥”的错误信息。dpkg: ..
Linux 用户必须处理的多项任务之一是软件安装。可能有两种方法可以用来安装软件,特别是在基于 Debian 的发行版上,例如 Ubuntu 和 Linux Mint。第一种是使用包管理工具(例如 apt-get、apt、aptitude 和 synaptic)..
在这篇社论中,我们将介绍一个名为 apt-fast 的强大实用程序,您可以使用它来加速 apt、apt-get 或 aptitude 下载软件包的速度。apt-fast 是流行的 apt、apt-get 和 aptitude 的开源 shell 脚本包装器包管理工具有助..
多年来,Linux 不仅在个人用户中逐渐受到欢迎,而且在寻求更多隐私并努力摆脱供应商锁定的企业和企业中也越来越受欢迎。令人惊讶的是,Linux 上提供的种类繁多的应用程序和程序可以满足小公司和拥有数千名员工的大公..