2019独角兽企业重金招聘Python工程师标准>>>

我的经历及对软件架构的理解

我个人从事软件开发8年,大大小小软件做过不计其数,做过企业应用的架构设计,也做过全新的互联网在线SaaS应用的架构设计,也做过全新的互联网网站的架构设计,现在在做的是历史遗留的大型互联网应用的架构演进工作。基于我个人先谈谈自己对于软件架构的理解谈谈软件架构。

我理解的软件架构是设计师根据软件的各种类型的需求而设计的软件组成结构的设计。

那么这些需求应该包括业务目标、用户的软件功能性需求,非功能性需求;软件开发组织内部的开发效率需求,代码质量需求;软件运维组织的系统运维需求等等综合需求和设计约束等。

软件架构的组成我理解包括软件开发期的包以及类的设计及关系,项目工程组成及它们之间的关系,发布的应用程序及之间交互关系,软件系统最终运行期间的各种终端硬件、服务器、网络设备以及网络连接设备等。

但是我觉得我们很多被称作为“架构师”的人其实天天在做开发,做架构设计可能对架构的理解也是比较片面的,比较肤浅的,有的就好比是“盲人摸象”只知道局部不知道整体,了解的内容不够系统和全面,有的就好比是”不识庐山真面目,只缘身在此山中“,在某个领域做的时间太久了,思维和认知的局限性太强,没有对具体事务进行抽象,架构的本质认识不清晰。

《软件架构设计》的评价

我最近在阅读温昱编写的《软件架构设计》一书,温昱的个人实践经验更多的在企业级应用开发,所以本书中描述的很多内容都是企业级开发的一些具体方法及案例,因此对于我们很多骄傲的互联网行业的”架构师“会不屑一顾看,这些架构师会更多专注于”高并发、大数据、kafka、zookeeper,hadoop、redis"等等诸如这些高大上的具人技术上,根本看不起做企业应用开发的人。

但是我个人粗略看了本书,觉得对自己在理解软件架构及如何做软件架构设计方面有非常大的帮助,互联网的软件它本质上也是应用软件,只不过由于它的超大规模化部署导致软件架构及具体技术上产生很多巨大的挑战而已,但是本书是通用的讲解软件架构的概念及通用方法论的,对互联网应用同样是适用的。

《软件架构设计》一书对软件架构的定义

本书应该是总结了软件行业很多大牛对软件架构这个概念的看法,提取了大家的一些共识,应该是还是具有非常强的普适性的,我觉得对于我们从具体的软件架构中跳出来是有帮助的。

本文总结行业大牛对软件架构概念的定义分成两派,应该说相互联系但又互为补充。分别是“组成派”和“决策派”。

组成派

定义是:”软件系统的架构将系统描述为计算机组件及组件之间的交互“。这里的组件是广泛意义上的,是非常抽象的,既可以是软件也可以硬件,既可以很宏观,也可以很微小。它的描述是以软件本身为描述对象。

如上图所示,软件架构就是应用了一个组合模式,它是有很多部分组成的。

决策派

定义是软件系统是一些重要方面的决策集合。它包括这样一些问题的重要决策:

  • 软件系统的组成。这点上又包含了组合派的定义。
  • 选择组成系统的结构元素和他们之间的接口,以及当这些袁术交互协作所体现的行为;
  • 如何组合这些元素,使它们逐渐组合成更加大的子系统;
  • 用于指导这个系统组织的架构风格;这些元素以及它们的接口、协作和组合。
  • 软件架构不仅这种软件本身的结构和行为,还注重其它特性:使用、功能性、弹性、重用、可理解性、经济和技术的限制及权衡,甚至包括美学等。

这个定义有些复杂,理解起来也比较困难,我的理解就为了设计出一个符合各种需求,满足各种角色的要求,在各种约束范围之类的软件组成结构而需要做的各种决策集合。它的定义关注软件架构实践的主体——人,以人的决策作为描述对象;

这是技术选型的决策示例。

这是系统切分的决策示例。

对我的启示

做一个好的”大架构师“,需要做非常多的决策,而做出优雅的决策,这不仅仅是技术,还需要艺术,如何在多种复杂的、矛盾的因数中做出一个良好的权衡,这是对于人本身的知识、技能经验的深度和广度都有较高的要求,本身对我的作用是让自己知道还有哪些差距,哪些地方还需要提高。

我曾经亲身经历并了解的一个错误决策带来的后果可以说给大家听听,某公司来了一个具有Oracle背景的CTO,这位牛人来之后,因为自己的技术背景就行政命令要求正在研发的某系统将数据库从MySQL修改为Oracle,这位某CTO没干多久就走了,现在各部门都在热火朝天的干着去Oracle的事情,因为这个错误的决策,给我们苦逼的程序猿带来多少额外的工作量,这样翻来覆去的改给公司带来多少成本损失。所以说没有科学严谨的决策方法,某位具有某种陈旧的经验的某CTO一句话就产生了一个及其错误的决策的事情真是害人不浅。

转载于:https://my.oschina.net/ywbrj042/blog/631653

《软件架构设计.第二版解析软件架构概念》阅读笔记——到底什么是软件架构?...相关推荐

  1. 精通开关电源设计第二版pdf_11、秋招年35月准备期——Verilog HDL高级数字设计(第二版)...

    <Verilog HDL高级数字设计>(第二版) 一.目录如下:         虽然有些粗糙,但为显真实,此处就贴带笔记的照片了,后面设计到具体内容,我也尽量把带笔记的照片贴上. 课后习 ...

  2. 《使用图LSTM进行语义对象解析》--论文阅读笔记

    Semantic Object Parsing with Graph LSTM原文 GraphSage代码阅读笔记(TensorFlow版)目录 摘要 1.介绍 2 Related Work 3 Th ...

  3. 《UML用户指南第二版》再次温读笔记(一)(downmoon)

    前言:最近,花点时间重读(也不知道是第几遍了)<UML用户指南第二版>这本书,感觉虽然对WEB程序开发而言,UML的应用是一个极大的挑战,然而,其中蕴含的基本原理和指导性却是历久弥新,耐人 ...

  4. 《游戏设计的100个原理》阅读笔记——游戏创新、创作、平衡与解决问题的方法论【转】...

    <游戏设计的100个原理([美]Wendy Despain)>整合了众多游戏设计秘籍,它概括并阐释了100条重要的游戏设计领域的方法.原理和设计哲学,分4篇向读者讲述了游戏创新.创作.平衡 ...

  5. 学完可以解决90%以上的数据分析问题-利用python进行数据分析第二版(代码和中文笔记)...

    <利用python进行数据分析>是数据分析的基础教程,绝大部分数据分析师的入门教材,目前已经升级到第二版.本站搜集了教材的第二版原版代码进行中文翻译和注释,并做了一定的笔记.基本上只需要看 ...

  6. 计算机原理课程设计 第二版pdf,计算机原理课程设计.pdf

    第 1 页 共 10 页 计算机原理课程设计 计算机原理课程设计 成员信息成员信息 小组编号 8 成员信息 姓名 学号 实验分工 分值比例 组长 XXX 20040602XXXX 编写测试程序 总体测 ...

  7. 计算机原理课程设计 第二版pdf,计算机组成原理课程设计二.pdf

    计算机组成原理设计文档 目 录 实验简介 实验原理 ------------------------ 2 设计原理 ------------------------ 3 实验设备 ---------- ...

  8. 思科—计算机网络课程设计—第二章静态路由概念测试

    题目一 哪条 IPv6 静态路由将作为通过 OSPF 学习的动态路由的备份路由? 选择一项: Router1(config)# ipv6 route 2001:db8:acad:1::/32 2001 ...

  9. 算法分析与设计第二版(李春葆)第一章概论

    一.算法的概念 算法的5条性质 有限性:一个算法必须在执行有限步之后结束,并每一步都可能在有限时间内完成 确定性:每一条指令有确切的含义 可行性:每一条运算都是可以精确执行 输入性:一个算法有零个或多 ...

最新文章

  1. Hadoop学习之Mapreduce执行过程详解
  2. kaptcha验证码实现,配合spring boot使用
  3. 隔空操作之通过简单计算识别手的挥动反向
  4. Long类型转json时前端js丢失精度解决方案
  5. 一些.net命令行工具的使用
  6. c语言计算24游戏,C语言解24点游戏程序
  7. Akka的Actor生命周期《Eight》译
  8. 在FL Studio中编辑视频中的音频
  9. Android TextToSpeech(tts)语音播报(文字转语音)
  10. esp_image: Image length xxxx doesn‘t fit in partition length 1048576问题解决思路
  11. 以CS1231为例,解释电子方案开发中的ADC芯片
  12. 代币标准--ERC721协议源码解析
  13. LJN数理化生信奥队自传
  14. 《一篇文章全吃透》—YYModel的使用技巧
  15. C#通过TCP实现 HL7医疗系统传输的协议,并使用MLLP协议发送HL7消息
  16. 第五章--第三节:设计复用模式(pattern)
  17. HDU 3333HDU-3874 Necklace 离线树状数组
  18. 【GDKOI】2021提高Day1
  19. 小米及其他Android手机无法连接mac解决方案
  20. 故城县职教中心校企合作的计算机专业如何,校企合作下中职计算机应用专业课程体系的研究--以涉县职教中心为例...

热门文章

  1. 空格html代码快捷键,html的空格代码怎么写?教你如何使用空格nbsp代码
  2. 梅超风:我就是那个多年以前的女子
  3. 【vue】实现打印功能
  4. 前端-用js实现图层蒙版效果
  5. java计算机毕业设计同学录管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  6. 实际项目中应该避免@Async注解同类调用问题
  7. 汇编语言显示“*”符号图案(2)
  8. 腾讯云cos使用介绍
  9. 网站推广中如何写新闻软文
  10. 使用Java语言从零开始创建区块连