本篇围绕“软件架构设计”主题,从“程序员”成长的视角,深入浅出地讲述了架构师的修炼之道。从“基础篇”、到“设计过程篇”、到“模块划分专题”,本篇覆盖了架构设计的关键技能项,并且对于架构设计过程中可能出现的各种问题给与了解答。
本篇对于有志于成为架构师的程序员们具有非常有效的指导意义,对于已经成为架构师的同行们系统化规范架构设计也是很好的教材。
本篇总共分为三大部分15章的内容,由于细节内容实在是太多了,所以小编只把部分知识点截图出来粗略的介绍,每个小节里面有更加细化的内容。
需要本【软件架构设计程序员向架构师转型必备】技术文档的小伙伴,可以转发关注小编,++++++ V X ①⑧①③③⑤③②⑨⑦ 就可以获取了!
第1章,从程序员到架构师
人才,以及合理的人才结构,是软件公司乃至软件业发展的关键。
成才,并在企业中承担重要职责,是个人职业发展的关键。
第2章,解析软件架构概念
不积跬步,无以至千里。
程序员在向架构师转型时,都希望尽早弄清楚“什么是架构”。但是,架构的定义又多又乱,已造成“什么是架构”成了程序员向架构师转型的“大门槛”。
本章,我们讨论软件架构的概念。值得说明的是,人们对“Architecture”有着不同的中文叫法,比如架构、构架和体系结构等。本篇将一贯地采用“架构”的叫法:当然,当引用原文或提及书名时将保留原来的叫法。
第3章,理解架构设计视图
架构设计是一门解决复杂问题的艺术。
设计任何复杂系统时,架构视图都是不可或缺的(无-例外)。 但由于在日常开发工作中较少接触,大部分程序员对“设计视图”的思想还比较陌生。
本章围绕“架构视图”这一主题,将逐次讨论:设计架构时,架构视图为什么必不可少? [本章问题 1]
什么是架构视图? [本章问题2]
如何运用“逻辑视图+物理视图”设计一个系统的架构? [本章问题 3]
第4章,架构设计过程
作为职业软件人,我们]都寻求使用一-种有效而经济的过程,来建造一个能够工作的、有用的产品。
Grady Booch, Rational公司首席科学家
每个项目都是很独特的,因此开发人员必须努力保持微观过程的非正式性和宏观过程的正式性之间的平衡。
-Grady Booch,《面向对象分析与设计》
程序员向架构师转型,难在何处?难在必须要能开始“试着做起来”,并慢慢积累感觉,进而积累经验。
“需求决定架构”之所以是一-句废话,就是因为它没告诉开发人员“架构设计怎么做”。
甚至,在没有积累任何经验和“感觉”的情况下,忽然被老板“委以重任”负责架构设计,都未必是一-件好事。 因为这次失败了,下次机会就没了。
本章通过下述方式,讲清楚架构设计过程的大局,希望帮助程序员能将架构设计“试着做起来”:
架构设计过程包含哪些步骤?
步骤之间什么关系?下游步骤的“输入”依赖的是上游步骤的哪个“输出”?
第5章,需求分析
对于需求分析员而言,真正的专业主义是基于业务利益(解决问题、创造机会、提高管控力等)的沟通。
一徐锋, 《软件需求最佳实践》
当前业界,大多数架构师都认同“需求决定架构”,但对需求“如何决定”架构还知之不深。..不同需求影响架构的不同原理,才是架构设计思维的基础。
一个程序员,在向架构师转型的道路上,一定 “绕”不过软件需求的问题。
本章立足软件开发人员的视角,逐次讨论:需求怎么来的? (需求开发=愿最分析+需求分析)
如何判断掌握的需求全不全? (功能、 质量、约束三类需求都不能漏)
从需求向设计转化的关键思维是什么? (功能、质量、约束影响架构的不同原理是核心)
第6章,用例与需求
本章立足软件开发人员的视角,抽取一些实际问题,并在最后的“实际应用”一节解决“用例建模够不够?流程建模要不要?”的常见困感,希望对更清晰地运用用例技术有所帮助:
用例图、用例规约、用户故事,这些技术有什么关系?
如何应用?
需求分析的三套实践论中,用例建模和流程建模的关系是什么?
第7章,领域建模
很多希望向架构师转型的程序员。对“具体开发技术"都比较有信心。那么,转型路上他们最担心什么呢?
领域知识不足,是他们最大的担心。
本章以领城模型和领城建模为主题,逐次讨论:
什么是领城模型?
需求人员如何利用领城模型,避免沟通不足和分析瘫痪?
开发人员如何利用领城模型,破解“领城知识不足"死结?
如何通过领城模型, 提高系统的可扩展性?
第8章,确定关键需求
每向错误目标迈进一步,就离正确目标远了-一步。软件设计也不例外。
面对或厚或薄、或稳定或易变、或严谨或错误连篇的《需求文档),设计者应当如何确定真正影响、真正左右架构设计的关键需求呢?
围绕“设计目标如何确定"的话题,本章的讨论分3个层递进展开:
众说紛纭一什么决定 了架构。
真知灼见一关键需 求决定架构。
付诸行动一如何确定关键需求。
第9章,概念架构设计
概念架构是直指系统目标的设计思想、重大选择,因而非常重要。《方案建议书》《技术白皮书》和市场彩页中,都有它的身影,以说明产品/项目/方案的技术优势。也因此,有人称它为“市场架构"。
大量软件企业,招聘系统架构师(SA).系统工程师(SE)、技术经理、售前技术顾问、方案经理时,职位能力中其实都包含了对“概念架构设计能力”的要求。例如:
系统架构师(SA)。(1) 软件总体设计、开发及相关设计文档编写: (2)关键技术和算法设计研究; (3) 系统及技术解决方案设计,软件总体架构的搭建: (4) 通信协议设计制定、跟踪研究; .....
系统工程师(SE)。产品需求分析:产品系统设计:技术问题攻关:解决方案的输出和重点客户引导:指导开发工程师对产晶需求进行开发......
技术经理。负责公司系统的架构设计,承担从业务向技术转换的桥梁作用:协助项目经理制定项目计划和项目进度控制:辅助需求分析师开展需求分析、需求文档编写工作: ...
第10章,细化架构设计
从程序员到架构师的转型,必然要经历的一一个突破是“思维方式的突破”。
本章,我们要讲的5视图方法就是一种系统化的思维方法,主要内容有:它包含哪5个设计
视角? 5个视图涉及的15项设计任务是什么?
第11章,架构验证
不值得验证的架构,就不值得设计。本章的主题是架构验证:
原型技术的分类、用途。
如何进行架构验证。
第12章,粗粒度“功能模块”划分
模块划分是架构师的“看家本领”,也是架构师这-岗位的“基本职责",其重要性无需多说。程序员要向架构师转型,必须重点学习和掌握模块划分技能。
掌握模块划分,我们分4步进行。涉及,日常设计工作常用的功能树、分层架构、用例驱动、模块化等技巧:
(1)粗粒度的“功能模块”划分,应该怎么做?一本章讲。
(2)如何分层,如何分别封装各种“外部交互" ?一第13章讲。
(3)从用例(需求)到模块划分结构(设计)的具体步骤?一第14章讲。
(4)水平切分(层)≠垂直切分(功能模块)≠通用专用分离。细粒度模块化时,怎样综合利用多种模块划分的手段技巧?一第15章讲。
第13章,如何分层
王太太烧鱼时总是将鱼切成三段,丈夫不解其意,问原因。答日:我妈妈就是这样做的。间王太太的妈妈,回答又是:我妈妈就是这样做的。..最后,妈妈的妈妈揭晓了答案:原来那时家里穷买不起大锅,偶尔吃顿鱼就只好把鱼切成三段才能放进锅里!
这个故事还有另一个版本。王太太烙饼时总是把饼的外面一圈切掉,丈夫不解其意,问原因。答日:我妈妈就是这样做的。问王太太的妈妈,回答又是:我妈妈就是这样做的。...最后,妈妈的妈妈揭晓了答案:原来那时家里穷买不起大锅,只有把摊得太大的饼的外圈切掉才能放进锅里!
上述故事说明,“学样儿”未必适合,“知其所以然”才是王道。
程序员向架构师转型,对分层架构当然得从“学样儿”开始,但应该力求尽早“悟道"
精通分层架构设计对架构师岗位太有必要了,因此程序员能够知“分层架构设计”之所以然,起码是向架构师岗位迈进了一大步。本章讲解如何合理分层。
第14章,用例驱动的模块划分过程
用例技术,是功能需求实际上的标准。应用用例技术的企业和个人都非常多。既然如此,深刻领会如何从作为需求的用例过渡到模块划分设计,就大有现实意义了。
这就是本章的主题一用例驱动的模块划分过程。
第15章,模块划分的4步骤方法,运用层、模块、功能模块、用例驱动
要成为架构师,是先学方法,还是先实践?
本篇建议,尽早接触并尝试着设计(请参考第3章中关于“开发人员应该多尝试设计”的相关内容),并在进行过照猫画虎式的实践之后,系统地培训设计方法....
本章就介绍一种步骤化的模块划分方法。
由于这份文档的内容过多,为了节省读者朋友们的时间,我只整理出来了一部分供大家参考。
需要本【软件架构设计程序员向架构师转型必备】技术文档的小伙伴,可以转发关注小编,++++++ V X ①⑧①③③⑤③②⑨⑦ 就可以获取了!
大家来看看大佬对本篇的精彩点评:
基于软件架构的开发模式,作为软件开发的最佳实践之一, 越来越得到各行各业的重视和关注,但遗憾的是理解其精髓和内涵的人太少。温老师作为软件架构思想的传播者和推动者,在这本书中,对程序员如何成长为优秀的架构师给出了非常具体的指导原则和实现方法,是国内不可多得的真正将软件架构思想阐述如此精准的实践指导书。作为-名软件行业的从业者,我强烈推荐给大家。
-李哲洙博士东软集团电信事业部网管产品与系统部部长
这本书以架构设计人员实际工作流程为线索,详细阐述了逻辑架构和物理架构视图的重要性及其在架构设计中的应用方法。此外,本书从实践的角度,给出了架构设计的三个原则和6大步骤,并以具体实践过程为指导,给出了架构设计从需求分析到最后的架构设计、架构验证的完整的架构设计生命周期的实践方法,对软件研发项目团队和架构师的研发实践工作具有很好的指导意义。
一杨勇中兴通讯业务研究院平台 总工