热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

程序员架构修炼之道:软件架构设计的37个一般性原则

原则37:不要有任何借口。如果你是一个系统的开发者,把它做好是你的责任。要承担这个责任。要么做好,要么就压根不做。序言如果,

b63260176b3f6b62c7d88d046e37328a.png

原则37:不要有任何借口。如果你是一个系统的开发者,把它做好是你的责任。要承担这个责任。要么做好,要么就压根不做。

序言

如果,软件工程真的是一门工程学科,那么它是对经过验证的“原则、技术、语言和工具”的智慧的运用,用于创造和维护能够满足用户需求的软件。原则是关于软件工程的基本原理、规则或假设,不管所选的技术、工具或语言是什么,其都有效。

a7a002eef0f3180a2602f479abd53114.jpeg

当桥梁或建筑物倒塌时,调查人员会尝试确定是什么地方出了问题。通常,是因为建筑商未能遵守建筑规范(即施工期间要遵循的一套规则或原则),或者检查员未能找到物理损坏的位置。当软件失败时,通常是因为软件工程组织没有遵守某个原则。

理解和实践一门学科的所有原则是否可以预防所有灾难?绝对不是。它只会大大降低因你而导致灾难的可能性。正如亚历山大·波普所说,“犯错是人之常情。”只有通过犯错,我们才能学习,并制定新的原则。

软件工程的基本原则和人类探索的其他领域的基本原则存在根本性的不同。我们没有理由期待软件工程的原则具备和(例如)物理学原理一样的精确性和可预测性。原因是,一方面不像物理学或生物学,软件开发过程是由人来管理和实现的;这样,从长远看,软件开发的行为是不可预测的,它依赖于人的判断、奇想和行动。另一方面,软件似乎展现出很多有规律和可预测的特征。这使得很多基本原理可以被列出,并可以被没有经验的或有经验的软件工程师和管理者使用,以增强软件工程过程和软件产品的质量。

关于原则与技术、语言和工具的关系

原则是指经过长期经验总结所得出的合理化的现象。在软件工程领域,原则是关于软件工程的基本原理、规则或假设,不管所选的技术、工具或语言是什么,其都有效。

其他工程领域有基于物理学、生物学、化学或数学定律的原则,然而,由于软件工程的产物是非实体的(nonphysical),所以实体的定律(laws of the physical)并不能轻易地成为软件工程领域坚实的基础。

原则、技术、语言、工具的关系如下图。

outside_default.png

  • 原则(Principle)是工作的准则;原则代表了许多人从经验中总结出来的集体智慧。它们往往被描述为绝对真理(总是正确的)或用作推论(当X发生时,Y将会发生)。

  • 技术(Technique)是一种按部就班的流程,它帮助软件开发者执行一部分软件工程过程。技术倾向于强制遵循基本原则的一个子集。大部分技术会创建文档和(或)程序。许多技术也会分析现有的文档和(或)程序,或将其转变为产品。

  • 语言(Language)由一组基本元素(如单词或图形符号)、规则和语义组成。规则可以让人们用基本元素构造出更复杂的实体(如句子、图表、模型),语义则赋予每个实体组合以意义。语言用于表达所有软件工程的产出,无论是过程中的还是最终的。那些通过技术创建或分析的文档和程序通常也会用某种语言来表达。

  • 工具(Tool)是软件程序,可帮助软件工程师执行软件工程中的某些步骤。它们可以:

■ 作为工程师的顾问(例如,基于知识的需求助理)。
■ 分析某些内容是否符合某种技术(例如,数据流图检查器)或原则的子集。
■ 使软件工程中的一些工作实现自动化(例如,编译器)。
■ 辅助工程师完成一些工作(例如,编辑器)。

一个学科的原则集合,会随着学科的发展而发展。现存的原则会发生改变,新的原则会被加进来,旧的原则将不再适用。实践和从实践中获得的经验,促使我们发展了那些原则。如今,当我们去审视一些1964年的软件工程原则时,会觉得它们看起来很傻(例如,总是使用简短的变量名,或者尽可能让程序体积更小)。三十年后,如今的一些原则也会如此。

软件架构设计的37个一般原则

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

outside_default.png

参考阅读

(美)Alan M· Davis(艾伦·M·戴维斯). “软件开发的201个原则 2021。


推荐阅读
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 深入解析AUTOSAR方法论:汽车电子系统开发的理论基础(第三部分)
    本文详细探讨了AUTOSAR方法论在汽车电子软件系统开发中的应用,涵盖了从系统配置到生成可执行代码的各个关键步骤。通过介绍各阶段的任务和工具支持,帮助读者全面理解AUTOSAR的设计流程。 ... [详细]
  • 迎接云数据库新时代:程序员如何应对变革?
    在数据无处不在的时代,数据库成为了管理和处理数据的核心工具。从早期的信息记录方式到现代的云数据库,数据库技术经历了巨大的变革。本文将探讨云数据库的特点及其对程序员的影响。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 探讨架构师在项目中应如何平衡对产品的关注和对团队成员的关注,以实现最佳的开发成果。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 本文详细介绍了C语言中的指针,包括其基本概念、应用场景以及使用时的优缺点。同时,通过实例解析了指针在内存管理、数组操作、函数调用等方面的具体应用,并探讨了指针的安全性问题。 ... [详细]
  • 本文介绍了如何利用 Spring Boot 和 Groovy 构建一个灵活且可扩展的动态计算引擎,以满足钱包应用中类似余额宝功能的推广需求。我们将探讨不同的设计方案,并最终选择最适合的技术栈来实现这一目标。 ... [详细]
  • 编写了几个500行左右代码的程序,但基本上解决问题还是面向过程的思维,如何从问题中抽象出类,形成类的划分和设计,从而用面向对象的思维解决问题?有这方面的入门好书吗?最好是结合几个具体的案例分析的 ... [详细]
  • 云屏系统基于嵌入式微系统msOS,旨在解决当前嵌入式彩屏GUI编程中硬件要求高、软件开发复杂、界面效果不佳等问题。该系统通过结合MCU和Android技术,利用Html5+JavaScript实现高效、易用的图形用户界面开发,使嵌入式开发人员能够专注于业务逻辑。 ... [详细]
  • 本文探讨了现代分布式架构的多样性,包括高并发、多活数据中心、容器化、微服务、高可用性和弹性架构等,并介绍了与这些架构相关的重要管理技术,如DevOps、应用监控和自动化运维。文章还深入分析了分布式系统的核心概念、主要用途及类型,同时对比了单体应用与分布式服务化的优缺点。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 本文详细介绍了如何在 Android 中使用值动画(ValueAnimator)来动态调整 ImageView 的高度,并探讨了相关的关键属性和方法,包括图片填充后的高度、原始图片高度、动画变化因子以及布局重置等。 ... [详细]
author-avatar
Lovepetall
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有