张泰峰 6月3日

写在前面

2019悄悄溜走一半,无论是离别的忧愁,还是成长路途的艰辛,都在心中滚烫。

距离上一篇文章已经很久了... 懒惰的博主不能将这一切归结于我的时间、我的规划、我的工作,只能怪自己懒......正所谓学如逆水行舟,不进则退,不进到最后就只能退了。

今天突发一些关于架构的感悟,执笔记录下来。

软件架构的出发点

软件架构是一个软件系统开发生命周期中最前端的部分,也是最关键、最核心的部分。它决定了后续代码的走向;能够决定项目的走向;有时候甚至能够决定一家公司的生死。软件架构的成功要素,有很多点,这些点的一两个或更多个,组成了不同级别的业务系统或用户系统:

*1 可靠性

*2  安全性

*3 可伸缩性

*4 可定制化

*5 可扩展性

*6 可维护性

*7 用户体验

*8 可快速迭代性

面向用户的系统,用户体验 、快速迭代、安全、可靠 ,这四点必不可少,这些点围绕着的基础的技术选型、管理模式、规则、流程,也就跟着对应的权重的不同去分配了。

假如公司A需要做一个工具app,xx计算器、或xx记事本。 想要获得市场认可,它的架构就需要大约 : 30% 用户体验 、20%快速迭代、 10%可靠按照这个权重的分配去管理架构的技术选型、管理模式等等。一个工具app的安全性做的无懈可击,是不会得到市场认可的;一个电商网站的安全性可靠性不能保证,会被市场所抛弃。

又假如公司B有一个对内的管理系统,想要正确的结果,首先就得保证 可快速迭代性 ,业务每天都在变化,相反的用户体验、伸缩、安全、可靠,都可以相对不那么迫切。

通过可快速迭代性迅速迭代可定制化需求可扩展性需求提升了用户体验,用户体验的提升带动用户量的增长,则对可靠性、可维护、安全性、可伸缩性提出了更高的要求。

上面是我想要表达的,软件架构的出发点,是项目所处的市场的需求决定的。需求是什么,决定了架构是什么。

架构是难以更改的。是的,架构是非常难以更改的,如果你的项目已经推出市场了,除非重头来过,承受彻底重构带来的阵痛。这里往往要面临更严峻的考验,例如人事处理:有很多c++开发,想要转java,或有很多php开发,想要转python;再例如架构的改弦更张势必要有加班的,埋头苦干一个月,再走一遍来时的路~

举个栗子:TDD ,TDD本质过程就是要贯穿从需求分析、设计、编码、测试、整个研发过程。它其实是需求驱动,逐个满足每个的需求。 TDD的核心就在于把需求分析,设计,质量控制量化的过程,在编写测试用例时就可以规避、重构、设计需求的架构。TDD其实就是一个以需求驱动的架构模式、开发模式。

或许你已经在做相关的架构处理了,或许你已经吃到了一些苦头,这个理论或许可以帮助你认识到,要根据市场需求来制定合适的架构,推导合适的架构细节。要慎重。既不可以过度设计,也不可以设计不足,这把量尺是:市场需求。

架构以人为本

架构设计必须要考虑人在其中的重要因素,合适的人做合适的事情。一个好的架构,首要的就是要考虑所在团队的人的情况,我们往往倾向于抓技术层架构,忽略了怎么将合适的人放到合适的位置,已有的团队人员能不能合理的在架构中发挥应该有的作用。

抽象的处理、框架的引进很重要的一点是,如何解决人员素质、想法、环境的不一致。框架通过封装复杂的东西,简化业务的复杂程度,让对应的人能够专注对应的事情。抽象通过可以被共同理解的概念,简化复杂的内部处理逻辑,将人的目标聚拢在一起。

软件架构应该以人为本,将最高效的人放在最高效的地方能够取得最大化的成果,架构设计也就必须考虑人的因素。

例如我们有一个5人团队做一个项目,团队成员比例大约是: 1个leader  , 2 个核心, 2个实习,在设计这个项目的架构的时候,你必须要考虑的是,如何设计能把2个核心成员的力量放在合适的地方,如何设计能让2个实习成员能够完成既定的任务。 假如将2个核心与2个实习放在一起看待,过不了多久会出现一个情况,核心成员感觉做的东西技术含量太低,实习成员可能感觉东西难、累、赶,长此以往,项目会频繁面临人员变更。

我们倾向于集中精力做技术层架构,而不是人员层架构方面工作的主要原因,不是因为技术更重要,而是因为技术更容易做。人际交往是很复杂的,并且就效果而言从来都不会是很明晰和清楚的,但是它们比工作的任何其他方面都更重要。写代码并非只是写代码而已,而是与人有关——需要理解的东西包括那些人是谁,他们能作出什么贡献和需要什么东西,以及是多数派还是少数派等,诸如此类。“如果你把架构重点放一部分在人员安排的身上,那么就会发生更好的事情。

从人的角度衍生出的信息的交互

信息的交互其实是软件开发过程中需要重点关注的事情。信息的完整性、真实性,影响着开发过程中风险的暴露。风险则决定了项目的成功与否,所以我认为它是架构其中的一部分,它常常被人忽略,因为它既不属于技术,也不属于人员,更像管理工作,但其实它也跟架构有明显的关系。

软件项目的风险无非体现在以下四个方面:需求、技术、成本和进度。任何信息的不对等都有可能导致需求完成有误、技术设计偏离、成本过大、进度延迟。怎么样规划合理的信息交互、制定合理的反馈机制是架构需要考虑的问题之一。

总结和感悟

架构的目的是贴合市场需求指定合理的技术规划、人员规划、信息交互规划,架构是不仅仅局限于技术层面的。一个软件架构师,你需要统筹全局,深入了解需求,了解业务的走向,了解技术的价值所在。也需要制定或迎合人员的搭配,制定信息交互的流程。

核心观点

就是不可以忽略市场需求在架构设计中的力量,

更不可以忽略人在架构处理中所占的比例大小。

过度关注技术本身是一个本末倒置的行为。

阅读目录(置顶)(长期更新计算机领域知识)https://blog.csdn.net/weixin_43392489/article/details/102380691

阅读目录(置顶)(长期更新计算机领域知识)https://blog.csdn.net/weixin_43392489/article/details/102380882

阅读目录(置顶)(长期科技领域知识)https://blog.csdn.net/weixin_43392489/article/details/102600114

第六十六期:软件架构之道的一次感悟相关推荐

  1. 开发者论坛一周精粹(第六十八期) 如何把ecs转到另外一个账号?

    开发者论坛每周选取精华内容总结,精选论坛优质贴,每周更新一期,方便大家阅读! 如何把ecs转到另外一个账号 _小小黑 摘要:我要把我的个人账号的ecs转到公司,请问怎么可以吗? 解答>>h ...

  2. 人生哲理名言六十六条

    一提到哲理好像是老年人的专利,其实年青人多看看和学学哲理也是有好处的.摘录哲理名言共享. 人生哲理名言六十六条: 1人之所以痛苦,在于追求错误的东西. 2如果你不给自己烦恼,别人也永远不可能给你烦恼. ...

  3. QT开发(六十六)——登录对话框的验证机制

    QT开发(六十六)--登录对话框的验证机制 一.验证码机制 为了避免被恶意程序***,程序通常要使用安全机制.验证码机制是提供产生随机验证码,由用户识别填写来判断用户有效性的安全机制. 验证码必须动态 ...

  4. JavaScript学习(六十六)—字符串对象常用的属性和方法总结以及数组元素的排序问题

    JavaScript学习(六十六)-字符串对象常用的属性和方法总结以及数组元素的排序问题 学习内容 一.数组去重问题 二.二维数组的定义 三.二维数组的元素操作 四.二维数组的遍历 五.关联数组 六. ...

  5. 第六十六章 Caché 函数大全 $TRANSLATE 函数

    文章目录 第六十六章 Caché 函数大全 $TRANSLATE 函数 大纲 参数 描述 `$TRANSLATE`和`$REPLACE` 示例 第六十六章 Caché 函数大全 $TRANSLATE ...

  6. 如何选择适合你的兴趣爱好(六十六),折纸

    围城网的摇摇今天给大家带来了"如何选择适合你的兴趣爱好"系列专辑的第六十六讲--折纸. 折纸又称工艺折纸,是一种以纸张折成各种不同形状的手工活动.话说我在大三的时候,爱上了系里的一 ...

  7. 第六十六章 SQL命令 REVOKE

    文章目录 第六十六章 SQL命令 REVOKE 大纲 参数 描述 撤销的角色 撤销对象权限 撤销对象所有者特权 撤销表级和列级特权 CASCADE 或 RESTRICT 对缓存查询的影响 IRIS S ...

  8. 第六十六章 SQL函数 ISNULL

    文章目录 第六十六章 SQL函数 ISNULL 大纲 参数 描述 日期和时间显示转换 比较的NULL处理函数 示例 第六十六章 SQL函数 ISNULL 测试NULL并返回相应表达式的函数. 大纲 I ...

  9. 三十而立再出发 六十六载谱芳华 | 吉林大学举行交通学院成立30周年暨交通学科创建66周年庆祝大会...

    来源:吉林大学 三十周年栉风沐雨,同甘共苦:花甲六载春华秋实,铸就辉煌.11月19日上午,吉林大学交通学院成立30周年暨交通学科创建66周年庆祝大会在南岭校区体育馆举行.上午9时30分,庆祝大会在国歌 ...

最新文章

  1. eclipse 3.55安装j2ee开发工具
  2. C语言0xc0000142错误,第一次用c++编译器出现奇怪的报错
  3. 可逆素数编程c语言,巧用C语言求四位的可逆素数
  4. Python笔记之读取yaml文件
  5. linux统计某个字符个数,Linux统计一个文件中特定字符个数的方法
  6. 用JSF实现页面刷新后,checkbox仍处于选中状态
  7. 安理大计算机专业全国排名,安徽大学排名:安徽有哪些大学2017排名
  8. 【原创】常用元器件选型目录-cayden(待续)
  9. 四旋翼无人机飞控系统设计(闭环控制系统)
  10. 王利杰:我做天使投资的心路历程
  11. Pymol中如何显示stick+cartoon+surface
  12. ubuntu 清空回收站
  13. 实操《深入浅出React和Redux》第四期--react-redux
  14. java8新特性之lambda表达式--超级详细版本
  15. 思科交换机 DHCP 服务配置
  16. WIN8 Prolific USB-to-Serial Comm Port : 该设备无法启动。 (代码 10)
  17. android短彩信相关
  18. Python爬虫:史上最详细的Python爬虫库urllib讲解,绝对经典,值得收藏
  19. 做自己——鬼脚七自媒体第一季
  20. “空中交巡警”+智能信号灯 渝中智慧城市建设焕发新活力

热门文章

  1. graphpad7.04多组比较p值_同是折线图为何你却这么优秀,这才是多组数据作图应该有的样子...
  2. php 实时更新内容_亿级视频内容如何实时更新?优酷视频背后的技术揭秘
  3. C语言多项式乘法模拟,急!!!!c语言:求n次多项式的加法和乘法
  4. oracle 增加间隔分区,oracle分区表之间隔分区(oracle 11g) - 漫兮网
  5. tableau获取筛选器值_认识Tableau中的筛选器
  6. mysql 永真_sql注入
  7. 【联盛德W806上手笔记】一、开发环境和烧录程序
  8. JS遍历对象或者数组
  9. 安卓USB开发教程 六 安卓 AOA 2.0
  10. Linux文件去掉^M