软件架构的30条原则

02 面向对象设计的七大原则 面向对象的设计原则 软件的可维护性和可复用性是用于衡量软件质量的质量属性,软件的可维护性是指软件能够被理解、改正、适用以及扩展的难易程度,软件的可复用性是指软件能够被复用的难易程度。 1> 开闭原则(OCP) 开闭原则(Open Closed Principle,OCP), 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 1.1 开闭原则的作用 开闭原则是面向对象程序设计的终极目标,它使软件实体拥有一定 阅读详情

基本原则

原则 1: KISS (Keep it simple, stupid)  “指设计时要坚持简约原则,避免不必要的复杂化。” 其思想是使用最简单的解决方案来完成这项工作。

 

原则 2: YAGNI (You aren’t gonna need it) — 在确定需要之前不要构建它。

 

原则 3: Crawl, walk, run. 换句话说,先让它工作,然后再让它变得更好,最后让它变得伟大。做迭代开发——做敏捷的迭代开发。对于每个特性,创建里程碑(最长2周)并迭代。

 

原则 4: 构建稳定、高质量产品的唯一方法是通过自动化测试。在自动化测试中要有创造性;一切都可以自动化!当你设计的时候想想这个。

 

原则 5: 始终考虑投资回报(ROI),并将最大的注意力投入到产生最大的影响上。

 

原则 6: 了解您的用户并相应地平衡您的工作。对于大多数产品,将有成千上万的最终用户、20个产品的开发人员和100个DevOp人员来维护。例如,不要花费几个月的时间来为DevOp人员构建一个UI(他们根本不会用UI,相反他们喜欢使用脚本!)。这是原则5的一个特例。

 

原则 7: 尽可能独立地设计和测试特性。当你设计的时候想想这个。从长远来看,它会省去很多麻烦,否则,您无法测试系统,直到所有东西都构建好。而且,有了这个原则,你的发布也会更流畅。

 

原则 8: 我们都喜欢闪亮的设计,但是不要将您永远不需要的特性和解决方案引入到架构中。

可选的

 

原则 9: 要完全考虑用户将如何使用我们的产品是不可能的。所以拥抱MVP(最小可行产品)吧。其思想是找出很少的用例,只做支持这些用例的特性,发布产品,并基于反馈和经验塑造未来的产品。

原则 10: 尽可能少地开发功能;当你不确定的时候,不要去想它。许多功能从未使用过;也许你会留下一个扩展点。

原则 11: 等待别人的要求(特别是对于某些功能,直到确实有必要再进行添加)

原则 12:如果客户要求的功能搞砸了大局,你要有勇气与之斗争。找出更大的图景,试着找到另一种方法来解决这个问题。牢记你是行家,你应该带头。你的工作是做正确的事,而不是受欢迎的事。用户稍后会感谢您。

 

服务器设计和并发性

 

原则 13: 了解服务器如何工作,从硬件到操作系统,直至您的编程语言。优化IO调用的数量是通向最佳架构的第一盏指路明灯。

原则 14: 了解Amdhal的同步定律。线程间共享的可变数据会减慢程序的速度。如果可能的话,使用并发数据结构,并且只有在必要时才使用同步。试着尽可能短的时间锁住锁。如果你打算在锁的时候阻止,确保你知道你在做什么。如果它能坏,它就会坏。

原则 15:如果您的设计是非阻塞的、事件驱动的体系结构,那么永远不要阻塞线程或从这些线程执行IO。如果你这样做了,系统就会像骡子一样慢。

分布式系统

 

原则 16:状态系统是可扩展的和直接的。尽可能了解和使用无共享架构。

原则 17: 除非您同时控制客户端和服务器上的代码,否则即使消息传递失败,也很难一次完成。试着设计你的系统来减少需求(使用原则18)。要知道,大多数承诺一次交货的系统都在某个地方偷工减料。

原则 18: 尽可能实现幂等操作。这样,您就可以轻松恢复,您也可以立即进行一次交付。

原则 19: 知道CAP定理。扩展交易是困难的。在可能的情况下使用补偿。基于rdbms的事务不进行扩展。

原则 20: 分布式共识不会扩展,群组通信也不会,集群范围内的可靠消息传递也不会。任何一个节点的最大限制都是一天大约8个节点。

原则 21: 在分布式系统中,永远不能隐藏延迟和故障(请参阅解释的分布式计算谬论)。

用户体验

 

原则 22: 了解你的用户并了解他们的目标:他是新手、专家还是普通用户?他懂多少计算机科学?极客喜欢扩展点,开发人员喜欢示例和脚本,普通人喜欢ui。

原则 23: 最好的产品不需要说明书。它的使用是不言自明的。

原则 24:当您无法在两种选择之间做出选择时,不要将问题作为配置选项传递。您让用户和解决方案架构师的日子不好过。如果他们比你更不了解这个系统是如何工作的,他们怎么能做出决定呢?最好的选择是找到一个每次都有效的选择;其次是自动进行选择,第三是添加配置参数并设置合理的默认值。

原则 25: 对于配置总是有合理的默认值。

原则 26:设计不良的配置可能会造成很多混乱。总是记录一些配置的示例值。

原则 27: 根据用户不需要计算就能回答的问题来询问配置值(例如,不要询问最大缓存条目的数量——而是询问应该用于缓存的最大内存数量)

原则 28: 如果看到未知的配置,就抛出错误。永远默默地忽略它。无声的配置错误是调试过程中许多时间丢失的根源。

面临的困难

 

原则 29: 构思一门新语言很容易,但要把它弄好却很难。尽量不要这样做,除非团队可以在这上面花费至少10人年的时间。如果你仍然不确定,请阅读关于语言设计的五个问题。

原则 30: 可组合的拖放ui很困难,除非团队准备在其中投入10人年,否则不要启动一个。

最后,让我谈谈一件随着时间的推移而改变了主意的事情。在理想的情况下,平台必须由正交组件组成——每个组件处理一个方面(例如,安全性、消息传递、注册表、中介、分析)。具有这些特性的系统将是最理想的。

 

不幸的是,很难实现那种状态。严格执行这一点可能是错误的,有时我们发现我们添加的特性根本没用,然后所有额外的工作都白白地浪费掉了。最后,如果这导致了多个团队之间的协商,那么这个特性可能永远无法完成。

 

现在回过头来看,当我试图消除复制导致的显著复杂性时,我愿意忍受重复。治愈可能比疾病更糟糕。

 

结论

 

作为架构师,一个人应该像一个园丁一样思考,他塑造、管理和清除杂草,而不是定义和建造。你应该策划而不是命令,塑造而不是定义,煽动讨论而不是贴上标签。

 

虽然在短期内支配体系结构可能更便宜、更容易,但从长期来看,指导和让团队找到他们的方法是有好处的。

 

如果你不小心,那么你就更容易从架构出发,因为设计师只告诉你他的架构是错误的,而不告诉你为什么是错误的。避免这种情况的一种方法是制定一套被广泛接受的原则,这些原则将成为未来建筑师讨论和学习的基础。

 

我们讨论了一些帮助我应对挑战的原则。下面是总结。

 

 

 

 

 

讨论软件架构的30条原则

 

 

 

 

Altium Designer 21 DRC检查:从新手到高手,这10个常见错误你踩过几个? 本文详细解析Altium Designer 21 DRC检查中的10个高频错误,包括间距违规、线宽违规、未连接网络等常见问题,并提供精准修复方案和实战技巧。通过分层诊断、智能规则设置和三维排查等方法,帮助工程师从新手进阶为高手,提升PCB设计效率和质量。 阅读详情

相关推荐

Python实现微信PC端聊天记录自动化监听与智能回复

本文详细介绍了如何使用Python实现微信PC端聊天记录的自动化监听与智能回复。通过win32api和uiautomation库,模拟人工操作,实时监控聊天窗口并抓取新消息。文章重点讲解了核心代码逻辑、环境搭建步骤,并提供了实现关键词触发自动回复的完整方案,旨在提高工作效率与信息管理自动化水平。

weixin_29092031的博客 345

30原则

[size=large]学会和同事相处的30个原则 1.无论发生什么事情,都要首先想到自己是不是做错了。如果自己没错(那是不可能的),那么就站在对方的角度,体验一下对方的感觉。   2.让自己去适应环境,因为环境永远不会来适应你。即使这是一个非常非常痛苦的过程。   3.大方一点。不会大方就学大方一点。如果大方真的会让你很心疼,那就装大方一点。   4.低调一点,低调一点,再低调一点(要比...

vikingwei2015的专栏 417

Wireshark时间分析实战:精准调试网络延迟与时间同步问题

本文深入探讨了Wireshark在网络延迟与时间同步问题分析中的核心应用。通过实战案例,详细讲解了如何设置时间显示格式、利用时间参考点量化关键路径延迟,以及运用时间平移功能校正错位时间轴。掌握这些时间分析技巧,能帮助网络工程师精准定位隐藏于数据包时序中的性能瓶颈与故障根源。

weixin_29290963的博客 262

软件架构的23个基本原则

软件体系架构基于一组适用于各种软件系统的基本原则,有经验的架构师知道这些原则,并且能够在软件产品的正确位置实现特定的原则。下面我们快速浏览一下架构师日常遵循的基本原则。

chenzoff的专栏 282

【RL in VLA】VLA中的强化学习

本文提出了一种名为 Reinforcement Learning Distilled Generalist(RLDG) 的方法,通过强化学习生成高质量训练数据来微调机器人基础模型。通过在多个精确操作任务上的实验,我们证明了 RLDG 在成功率和泛化能力上显著优于使用人类演示的传统微调方法。RLDG 不仅减少了对人类演示数据的依赖,还展示了在复杂多阶段任务中的灵活性和有效性。

三木今天学习了嘛の博客 2257

macOS安装Cplex+yalmip

macOS安装Cplex+yalmip

DS 4248

Amdahl定律

Amdahl定律 有些问题使用越多的资源就能越快地解决——越多的工人参与收割庄稼,那么就能越快地完成收获。另一些任务根本就是串行化的——增加更多的工人根本不可能提高收割速度。如果我们使用线程的重要原因之一是为了支配多处理器的能力,我们必须保证问题被恰当地进行了并行化的分解,并且我们的程序有效地使用了这种并行的潜能。 大多数并发程序都与农耕有着很多相似之处,由一系列并行和

Vange的专栏 1万+

Win32逆向必备:X32dbg中窗口句柄查看与消息断点的高级用法

本文深入探讨了X32dbg在Win32逆向工程中的高级应用,重点解析窗口句柄查看与消息断点的实战技巧。通过MFC程序逆向案例,详细介绍了如何利用窗口句柄层次结构、条件断点设置及消息映射表定位等技术,快速捕获关键业务逻辑,提升逆向分析效率。

nginx7reverse的博客 1016

Amdahl定律(最直观理解)

Amdahl 定律(也叫阿姆达尔定律)的主要思想是:当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度。 若假设系统执行某个应用程序所需时间为 T1 , 优化后的时间为 T2 ,用 S 表示 (T1 / T2),则公式为: S = 1 / (1 - a + a / k) 推导过程: 假...

Epsilon_ziL的博客 5767

Uncertainty-Aware Mean Teacher(UA-MT)

本文提出了一种新的基于不确定性的半监督学习框架(UA-MT),通过额外利用未标记的数据从3D MR图像中分割左心房。具体地说,本文建立了一个教师模型和一个学生模型,学生模型通过最小化标注数据上的分割监督损失和所有输入数据上的与教师模型预测输出的一致性损失进行优化。如果没有未标记输入中的注释,教师模型的预测目标可能不可靠且有噪声。:在估计不确定性 U 的指导下,我们过滤掉相对不可靠**(高不确定性),整个体积** U 的不确定性**是 {u} ∈ RH×W ×D。过滤掉高不确定性的,也就是熵大于某个值的。

Alexa_的博客 1869

基于DeepFashion2和YOLOv12的服装检测系统:从数据集构建到UI界面实现

官方网站:数据集大小: 约80GB(压缩包)包含训练集、验证集和测试集数据集目录结构:text复制下载├── train/└── test/├── image/├── annos/Backbone优化:使用更高效的CSPNet结构Neck增强:引入BiFPN特征金字塔网络Head改进:使用解耦头(Decoupled Head)提升分类和定位精度损失函数:采用CIoU损失和分类Focal Loss训练策略:引入Mosaic数据增强和自适应锚框python复制下载。

YOLO 498

和Apache架构师Srinath一起来探讨软件架构设计的30 条原则

本文作者叫 Srinath,是一位科学家,软件架构师,也是一名在分布式系统上工作的程序员。他是 Apache Axis2 项目的联合创始人,也是 Apache Software 基金会的成员。他是 WSO2 流处理器的联席架构师。 Srinath 通过不懈的努力最终总结出了 30 条架构设计原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师团队或部门。Srinath 认为架构师应该扮演的角色是一个引导者,讨论发起者,花草修建者,而不是定义者和构建者。 Srinath 为了解决团队内部的架

吃果冻不吐果冻皮 329

汽车LIN总线(3) -- 协议层:帧的类型

主要介绍LIN协议层中帧的类型,介绍中加入一点自己的理解(带下划线的是,其余是官方资料)。

晴朗luo的博客 889

讨论软件架构的30条共同原则

想象一下飞过的体系结构审查。 一位建筑师走进来,环顾四周,掩饰着自己的双筒望远镜。 他提供的评论通常过于笼统或脱离上下文。 评论时常常会充耳不闻或保持沉默。 他们很少会帮助任何人。 每个程序员都很害怕。 每个建筑师也很害怕。 据说软件架构师应该像园丁而不是指挥官那样思考。 前者可以塑造,管理和去除杂草,而后者则可以定义和支配。 架构师应该策展而不是命令,塑造而不是定义,并鼓励讨论而不是标签。 ...

编程故事的地方 221

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【经验】Apache的架构师们遵循的30条设计原则

一位国外高级工程师分享的30条架构师的经验,此文为英文。

huanqing2010的专栏 467

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Apache架构师都遵循的30条设计原则

文章来源:【公众号:dbaplus社群】目录基本原则功能选择服务端设计和并发分布式系统用户体验艰难的问题总结Srinath 通过不懈的努力最终总结出了 30 条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师团队或部门。Srinath 认为架构师应该扮演的角色是一个引导者,讨论发起者,花草修建者,而不是定义者和构建者。Srinath 为了解决团队...

石杉的架构笔记 314

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

架构师必备:Apache 架构师的 30 条设计原则!

来源:SrinathImportSource基本原则功能选择服务端设计和并发分布式系统用户体验艰难的问题总结本文作者叫 Srinath,是一位科学家,软件架构师,也是一名在分布式系统上工...

互扯程序的博客 275

软件架构原则

软件架构设计原则 基本原则 原则1: KISS (Keep it simple,sutpid) 和保持每件事情都尽可能的简单,用最简单的解决方案来解决问题。 原则2: YAGNI(你不需要它)原则 ,只在需要时构建 原则3: 先学会爬,然后再学会走,最后学会跑。换句话说,先保证能够正常运行,然后优化它使其更好,最后逐渐让它变得完美。使用迭代开发,采用敏捷开发模式。为每个功能制定一个...

博学而笃志,切问而近思 670

优秀架构师必须了解的30条设计原则

我们在设计软件的过程中,把握的一个关键点是:软件架构并非由架构师负责设计。我们的架构不是由架构师制定,然后交给其他人来实施。 相反,架构的设计任务由真正编写代码的团队负责。架构师负责对工程师设计的架构进行修复、完策划和改进。我们的架构团队是指导员和把关人,而非独裁者。 基本原则 原则1: KISS (Keep it simple,sutpid) 和保持每件事情都尽可能的简单,用最简单的解决方案来...

Salted fish in hand, I have the world. 182

架构师 设计原则

基本原则 原则1:KISS(Keep it simple,sutpid) 和保持每件事情都尽可能的简单。用最简单的解决方案来解决问题。 原则2:YAGNI(You aren’t gonna need it)-不要去搞一些不需要的东西,需要的时候再搞吧。 原则3:爬,走,跑。换句话说就是先保证跑通,然后再优化变得更好,然后继续优化让其变得伟大。迭代着去做事情,敏捷开发的思路。...

oQiuQian的博客 349

Apache的架构师总结出30条架构设计原则

Srinath是一位科学家,软件架构师,也是一名在分布式系统上工作的程序员。 他是Apache Axis2项目的联合创始人,也是Apache Software基金会的成员。 他是WSO2流处理器(wso2.com/analytics)的联席架构师。 Srinath撰写了两本关于MapReduce和许多技术文章的书。 他获得了博士学位。 来自美国印第安纳大学。 Srinath通过不懈的努力最终总结出了30条架构原则,他主张架构师的角色应该由开发团队本身去扮演,而不是专门有个架构师团队或部门。Srinath认为

liaowenxiong的博客 476

优秀架构师必须了解的6大方面30条设计原则

架构的话题,之前就讲过许多,比如: 对呀,我就是认定架构师都是不干活,只会画PPT的! 好文 | 架构师更多的是和人打交道,说说我见到和听说到的架构师升级步骤和平时的工作内容 架构师成长之路之限流漫谈 支付宝架构师眼中的高并发架构 老板让你抗住千万级流量,如何做架构设计? 今日头条 Go 建千亿级微服务的实践 阿里云技术专家分享:现代 IM 系统中消息推送和存储架构的实现 程序员必备技能——如何画...

qf2019的博客 1187

分享这 6 大方面 30 条架构原则

点击上方"IT牧场",选择"设为星标"技术干货每日送达!文章来源 |https://hackernoon.com/作者 |Srinath Perera...

ITMuch的专栏 239

架构师必须了解的30条设计原则

众所周知,架构师的角色,更偏向于策划、而非指挥,塑造、而非支配,其存在的意义,在于引导大家讨论、而非自己主宰一切。 但是,具体应该如何执行呢?本文作者整理了 30 个公认的架构原则,来帮助大家解决此问题。也许有的原则,你从未听说,但你看完就能快速学会。 相信你学会了,工作起来也会事半功倍,或许还可帮你避免很多无用的加班! 在 WSO2,我参与架构评审的时间已长达八年之久。WSO2 的产品非常丰富,...

void 455

Apache 的架构师们遵循的 30 条设计原则

点击上方“杰哥的IT之旅”,选择“置顶公众号”干货、福利第一时间送达!来源:ITPUBhttp://www.itpub.net/2019/07/29/2529/本文作者叫...

JackTian 283

架构师必须了解的30条设计原则(摘抄)

避免这种情况的一种方法是拥有一套普遍接受的原则,这些原则是讨论架构时遵循的基本点,也是初学者学习架构的好资源。因为在项目初始状态时,很多事情是不确定的,你无法做到这样的独立性,现在我认为在开始的时候适当的重复是必要的,当你尝试铲除他们的时候,你会发现引入了新的复杂性,分布本身就意味着复杂。**原则9:**想要准确知道用户如何使用我们的产品是很难的。**原则27:**询问用户配置值的时候,注意选择用户无需即可设置的值(例如,不要问用户需要的最大缓存条目数量,而是要问他想要用于缓存的内存数量)

xushuanglu_csdn的博客 904
上一篇: REST API和SOAP API之间的区别
下一篇: JavaScript图表的数据可视化:比较D3和Kendo UI
codinghello
博客等级 码龄25年 47粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值