**第8章建立模型,化繁为简;**再成功的软件系统也难免走向复杂。用户数量的增加将给系统的可用性、可伸缩性、性能表现施加前所未有的压力。新功能不断插入,补丁越来越多,让软件越来越笨重。扩展系统的任务可能压得开发团队喘不过气。如果不保持警惕,软件系统最终会成为其自身成功的受害者。
当然,复杂性刚刚露出狰狞面目时,我们还是有办法控制的,比如通过需求变更和代码裁剪精简系统,将大件拆分成容易分析和管理的小件,还可以从细节中抽身出来,从更抽象的层面重新思考软件。
我们曾说过,架构是由结构组成的,而结构又是由元素和关系组成的。本章将学习使用这些基本构件创建有意义的模型,帮助我们分析、构思、推演我们的设计。
**第9章召开架构设计研讨会;**本章学习筹划和主持架构设计研讨会。读者将学习如何主持设计研讨会。良好的主持不仅仅是举止得当,更要让讨论顺利开展。本章讲解的方法将有助于提高研讨会的效率。
**第10章展示设计决策;**分享设计想法的最佳方式是把它展示出来。光凭嘴说,别人可能很难理解你的思路。把架构画出来,大家就能按照自己的节奏和方式来琢磨。开发人员都清楚,讨论抽象想法最好找一块白板,画点草图。把想法画出来才能保证大家的理解是一致的。
架构图没必要画得很精致,只要能够有效表达想法就行。第8章曾讲解过通过创建准确的模型来推演架构,提升质量属性。本章将学习绘制架构图,以便与开发人员沟通。
**第11章描述架构;**大家都不喜欢写架构文档,它占据了写代码的时间,而且看起来总是过时的。另外,文档格式常常很怪,编辑起来很麻烦。最重要的是,没有人愿意读!难怪有人说软件架构描述(缩写SAD)是一个悲剧。
糟糕的架构描述着实让人难受,但出色的架构描述却能向团队展示清晰的愿景。优秀的架构描述是有用的资产,它能促进沟通与协作,将设计决策和思想有效传递给每一个人,提高软件开发的质量。
本章学习描述软件架构,用人性化的、简洁的形式向受众展示确切的信息,让大家爱上它。爱是一个带有强烈情绪的词,但我保证让人们爱上架构描述比你想象的简单。
**第12章架构评估;**对学生、家长、老师来说,成绩单是重要的反馈渠道。学生不必等到年底才知道自己的课程是“过了”还是“挂了”——通过每个季度的成绩单,就能判断自己是否获得了理想的成绩,以及哪些地方需要改进。架构评估的作用就像成绩单一样,它让我们尽早发现问题,从而按计划交付系统。
架构评估可以提高开发效率,而不是单纯地占用编程时间。顺利的话,架构评估一小时就可以完成,它很容易融入现有开发流程中,而且不需要团队成员掌握什么新知识。
本章将学习对架构进行评估。评估结果可用于指导团队、为设计决策提供支持、降低交付风险、提高架构设计水平。
**第13章鼓励团队参与架构设计;**开发现代软件系统需要借助团队的力量。科技进步(容器技术、云设施等)赋予了开发者更大的灵活性和权力。随之而来的新架构模式(微服务、FaaS等)则对开发人员提出了更高的要求。他们必须清楚自己的决策会对包括质量属性在内的系统特性造成什么样的影响。
在现代软件开发中,开发人员与架构师的角色几乎没有差别。这并不是说现代软件开发团队不需要架构师,而是说我们需要的不再是那种传统的、居高临下的技术领导者。
今天的架构师应该与团队一起设计架构,而不是独自为团队设计架构。架构师应该既是技术专家,也是教练和导师。本书前两部分讲解了架构设计的核心原则和方法。现在,你要学习让团队与你一起成长,共同设计出色的软件架构。
**第三部分讨论一系列实用的架构设计方法。世上没有万能钥匙,每位软件工程师都有自己的一套经验、方法、技术。第三部分将介绍我自己的经验、方法、技术。
第14章理解问题的常用方法;**理解模式要求我们主动从利益相关方处获取信息,用于定义(或重新定义)问题。不仅要理解需求,还要理解谁是利益相关方主体、理解系统的业务目标,同时开始构思如何设计架构满足需求。
第5章曾提到四类关键架构需求.这几类需求都会对架构产生影响,而质量属性的影响最大,是架构中的关键问题.
约束给定或选定的不可更改的设计决策。
质量属性外部可见特性,表征系统在特定环境下的运行情况。影响较大的功能需求架构设计需要特别注意的特性和功能。
其他影响因素时间、知识、经验、技术、办公室政治、你的技术特长,以及其他影响决策的东西.
本章介绍的方法能够让开发团队与利益相关方相互理解,从而挖掘出关键架构需求。如果你需要更好地理解问题,不妨试试这些方法。
**第15章探索解决方案的常用方法;**探索模式可以帮助我们发现各种解决问题的设计理念与工程方法。架构探索关注的是受架构控制的部分─—软件。我们并不是总有机会选择解决什么问题,但至少可以选择怎么解决。解决方案只受我们的知识、创造力、技能的约束。
探索似乎是没有边界的,但设计总是在前人的基础上开展的,设计思维的四条原则之一是善于借鉴(见第2.1节)。所有设计都是在已有设计基础上的重新设计和调整创新,探索首先要从这些已知的设计开始(比如第7章介绍的架构模式)。
架构师不仅是设计师,也是工程师,所以我们还要探索另外一些领域。比如软件的构建方法、已有的框架、经验法则,它们也会对架构产生影响;还有问题领域的概念和知识,这些是构思解决方案的出发点。当然,还要探索架构元素的关系和功能。
本章介绍的方法将帮助你构思各种架构设计方案。从这些方案中选择合适的架构,并找到相应的开发方法。
**第16章展示设计的常用方法;**介绍架构光靠嘴巴讲是不够的,应该设法展示出来。展示模式把抽象的想法(如设计概念)转变成可感知的对象,方便分享。将设计展示出来不但可以促进交流,而且可以用来检查设计能在多大程度上满足需求。设法展示的过程也是推演架构的过程。即使只是制作设计草稿,也是一种有用的思维练习。
除了画线框图,还有许多方式展示架构设计,比如制作原型、编写文档、开展实验、比较数据、讲故事,甚至表演。这些都可以用来向他人展示架构设计,而且效果都比单纯的语言交流更好。
本章介绍的方法将帮助你展示架构设计。你可以按照这里介绍的方法自己动手,但我建议你与他人一起合作,那样会更有趣,效果更好。这些方法的耗时一般不会超过30分钟。
展示的目的是分享,所以要请团队成员(或利益相关方)评估你制作的展示物。他们应该知道你希望展示什么样的想法。评估也是检查你对问题的理解是否与架构设计一致的过程。第17章将介绍常用的评估方法。
**第17章评估设计方案的常用方法;**评估模式帮助我们检查设计决策,确定它们满足需求的程度。设计不必追求完美,但至少应该够用。我们的目标是找到够用的架构,满足需求。解决方案只要够用就是合适和恰当的。
评估可以帮助我们发现不够用的架构部分。我们也许会发现自己对细节的理解还不充分。也许看起来不错的设计却有着不可接受的弊端(忽略了重要的约束,或者引入了过多的风险)。这种事知道得越早越好。越往后,修改决策的代价就越高。
评估结束后,我们应该有充足的信息来决定下一步采用哪种思维模式。TDC循环(见第2.3节)的检查阶段当然需要用到评估模式,思考阶段同样也需要。
评估应该是一项持续开展的活动。等到设计结束时才做评估,很可能为时已晚。因此每一步工作都应该做评估。这样,只要我们认为某个部分的架构设计是恰当和合适的,就可以进一步完善它的细节。架构的所有部分在开始构建之前都应该准备充分。
本章介绍的方法可以帮助团队深入了解架构,收集采取行动所需的信息。这些方法既可以用来验证假设、选择设计方案,也能帮助你决定下一步要做什么。
这份【架构师修炼之道】总共有313页,如果需要完整版的小伙伴,可以扫码来获取!!
本文的目标读者
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**
最后
现在正是金三银四的春招高潮,前阵子小编一直在搭建自己的网站,并整理了全套的**【一线互联网大厂Java核心面试题库+解析】:包括Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等**
[外链图片转存中…(img-0aXzDouI-1711870026241)]