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