架构整洁之道-书中箴言

金玉良言

走快的唯一方法是先走好。
做一个好的软件架构师所需要的自律和专注程度可能会让大部分程序员始料未及。
软件系统不应该依赖其不直接使用的组件。
程序规模上的墨菲定律
程序的规模会一直不断地增长下去,直到将有限的编译和链接时间填满为止。
软件架构师自身需要是程序员,并且必须一直坚持做一线程序员。
软件架构师应该是能力最强的一群程序员。
如果不亲身承受因系统设计而带来的麻烦,就体会不到设计不佳所带来的痛苦,接着就会逐渐迷失正确的设计方向。
要在设计中尽可能长时间地保留尽可能多的可选项。
系统维护的主要成本集中在“探秘”和“风险”这两件事上:
探秘:确定新增功能或被修复问题的最佳位置和最佳方式。
风险:当我们进行上述修改时,总是有可能衍生出新的问题。
如果在开发高层策略时,有意地让自己摆脱具体细节的纠缠,就可以将与具体实现相关的细节决策推迟或延后。越到后期,我们就有越多的信息来做出合理的决策。
一个优秀的软件架构师应该致力于最大化可选项数量。
重复在软件行业里一般来说都是坏事。
如果有两端看起来重复的代码,它们走的是不同的演进路径,有着不同的变更速率和变更缘由,那么这两段代码就不是真正的重复。
要小心避免陷入对任何重复都要立即消除的应激反应模式中。
软件架构设计本身就是一门划分边界的艺术。
一个系统最消耗人力资源的是什么?答:耦合
I/O是无关紧要的细节
软件开发技术发展的历史,就是一个如何想方设法方便地增加插件,从而构建一个可扩展、可维护的系统架构的故事。
线程既不属于架构边界,又不属于部署单元,仅仅是一种管理并调度程序执行的方式。
系统架构中最强的边界形式就是服务。
架构设计的工作常常需要将组建重排组合成为一个有向无环图。图中的每一个节点代表一个拥有相同层次策略的组件,每一条单向链接代表了一种组件之间的依赖关系。
软件系统是一组策略语句的集合。
一条策略距离系统的输入/输出越远,它所属的层级就越高。而直接管理输入/输出的策略在系统中的层次是最低的。
希望源码中的依赖关系与其数据流向脱钩,而与组件所在的层次挂钩。
一定要带着怀疑的态度审视每一个框架。
保持对系统用例的关注,避免让框架主导我们的架构设计。
应该通过用例对象来调度业务实体对象,确保所有的测试都不需要依赖框架。
任何形式的共享数据行为都会导致强耦合。
架构设计的任务就是找到高层策略和低层细节之间的架构边界,同时保证这些边界遵守依赖关系规则。
横跨型变更(cross-cutting concern)。系统的架构边界事实上并不落在服务之间,而是穿透所有服务,在服务内部以组件的形式存在。
必须在服务内部采用遵守依赖关系原则的组件设计方式。
服务边界并不能代表系统的架构边界,服务内部的组件边界才是。
系统的架构是由系统内部的架构边界、边界之间的依赖关系所定义的,与系统中各组件之间的调用、通信方式无关。
软件设计的第一条原则——不要依赖于多变的东西。
测试组件是系统架构中最外圈的程序。它们始终是向内依赖的,而且系统中没有其他组件依赖于它们。
软件(software)应该是一种使用周期很长的东西,而固件(firmware)则会随着硬件演进而淘汰过时。
软件构建过程的三个阶段
先让代码工作起来——如果代码不能工作,就不能产生价值
然后再试图将它变好——通过对代码进行重构,让我们自己合其他人更好地理解代码,并能按照需求不断地修改代码。
最后再试着让它运行得更快——按照性能提升的“需求”来重构代码。
随时准备“抛弃一个设计”
在实践中学习正确的工作方法,然后再重写一个更好的版本。
如果我们在构建代码的时候不够小心,没有小心安排哪些模块之间可以互相依赖,代码很快就非常难以更改了。
软件与固件之间的边界被称为硬件抽象层(HAL)
类似的还有,操作系统抽象层(OSAL)
从系统架构的角度来看,工具通常是无关紧要的。
常见的封装方式
按层封装,传统的水平分层架构
按功能封装,即垂直切分
端口和适配器,业务领域代码与具体实现细节隔离的架构
按组件封装
软件架构的响应式设计:前期设计够用,后期进行大量重构的设计思想。
每一项设计决策都必须为未来的变化敞开大门。
大部分的软件开发者是没有太多架构意识的,是更有经验的开发者让我了解了架构。
***********************************************************************

【如果文字看累了,可b站搜索“沙皮狗2021”,用听的方式领略知识的魅力】

传送门 :https://space.bilibili.com/407643589

【微信公众号】:沙皮狗2021

***********************************************************************

posted @   蜗牛慢慢向上爬  阅读(187)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
点击右上角即可分享
微信分享提示