软件架构师是每个程序员职业生涯中内功心法修炼的终极目标。要达到这个目标需要具备“十八般武艺,八十种技巧”,本书正是继《Java代码与架构之完美优化——实战经典》《软件品质之完美管理——实战经典》之后,优秀软件架构师又一本必读书,也是“软件架构师成长之路”系列教程的第三部作品,亦是本系列的收官之作。本书总结了JavaEE软件架构师应该具备的架构设计相关技能体系,希望可以成为程序员朋友们架构师成长之路上的铺路石。
从形上看,架构是系统结构的骨架,支撑和链接各个部分;从神上看,架构是系统设计的灵魂,深刻体现了业务技术实现的本质。从纵向架构上看,架构涉及由客户端发送请求到服务器处理,再从服务器返回给客户端的各个主要步骤的具体处理细节;从横向架构上看,架构又关联到实现这种客户端-服务器端的架构模式。本书把与此横纵体系相关的技术进行了系统的总结与对比。另外,要成为一名优秀的软件架构师,还需要攻克以下三个难关:
1)需要掌握各种技术的优缺点与特性,才能知道如何使用。
2)站在架构设计者的角度,思考一款优秀的系统架构应该具备哪些要素。
3)如何用“组合拳”来巧妙解决复杂问题。
本书尝试引导读者朋友来逐一攻破。
任何技术的学习都需要先调查研究,再模仿,最后再进行优化升级(也就是创新),架构设计亦是如此。本书首先介绍了架构设计理论与必备高级专题技能,然后介绍了各种常用架构模式以及对常用框架的模拟,最后介绍了开源框架设计以及自动化代码生成工具的相关技巧。其中重点介绍的部分配备了课后习题,也是对核心技能的进一步巩固与补充;也有点到为止的部分,目的是扩大大家的知识面,形成软件架构理论的必备知识。架构设计绝不是不着边际的假想,而应接地气,因此需要用一种具体的技术来实现其设计思想,所以本书以Java技术以及其最重要的开源框架Spring为核心,进行重点技术代码的演示。书中涉及架构实现代码部分,短的几十上百行,长的几百上千行,其中有些代码比较复杂,希望读者朋友能够静下心来慢慢体会。
“软件架构师成长之路”系列教程历时十年才陆续问世,之所以花费这么长的时间,一是因为涉及的知识与技巧非常多,二是体现了创作过程的“工匠精神”——作者除了倾尽自己的全力,本着务实严谨、精益求精的态度来创作,同时也时时思考:应该写哪些?不应该写哪些?系列教材内容广度与深度如何?应该以怎样的形式进行编排?如何贯穿前后知识点?如何体现综合技能?如何由点到线,由线到面,再由面到体,从而形成系统的知识与技巧体系?还有哪些部分可以优化?能否给读者带来实质性的帮助?有没有创新?如何启发读者朋友进行创新?有时候思考良久都迟迟不能下笔。
人们对软件架构的逐渐重视也是本书写作的一个契机,希望本系列教程能成为国内第一套软件架构师培训相关的原创系列图书,借此跟大家分享对架构的浅薄理解,同时亦介绍自己“刻意训练”的成长经历,权作抛砖引玉,希望读者朋友多来信交流。
一名优秀的软件架构师至少需要5~10年的一线实践。需练就一身本领,且能在项目中胜任架构师角色。如果想要成为一名优秀的架构师,就需要进一步精雕细琢自己的技能,且能培养架构师人才。虽然这条路充满艰辛,但是当一步一步攀登到峰顶时,那种收获的喜悦只有自己才可以体会得到……
本书与软件架构师
本书是作者多年Java软件架构实践与研究的经验总结,包含架构设计的8项原则,21种设计技巧,25个温馨提示,39个实战经典案例,架构测试以及开源软件设计、开发、发布等知识,同时还包括架构自动化代码工具的设计与开发技能。其内容详实、条理清晰、图文并茂、实战性强——一切都围绕提高读者软件架构实战技能。本书是培养具有高级软件架构设计与开发技能的优秀架构师所必备的武器之一。
365IT学院规划的整个“软件架构师成长之路”系列教程分为初、中、高三部曲,如图1 所示。第一部《Java代码与架构之完美优化——实战经典》为品质管理“开发篇”,总结了代码品质与架构优化的相关技能;其姊妹篇《软件品质之完美管理——实战经典》为品质管理“管理篇”,总结了软件品质管理相关技能;第三部即本书,是这个培训系列教材的高级读本,总结了架构设计与实现的相关技能。三本书并不是孤立的,而是相辅相成的。例如,利用第三本书的架构设计技术进行系统设计之后,还需要借助第一本书的架构优化技巧进行优化,这样就形成一个由垂直整合的闭环生态链和一个横向扩展的开放生态链共同构成的架构技能生态体系。卓越的软件架构设计技能是程序员通往架构师神圣殿堂的必经之路,本书将是这条路上的一盏明灯,帮助读者早日实现软件架构师之梦。
本书与翻转课堂模式
本书采用翻转课堂模式(The Flipped Classroom)。在内容安排上,首先抛出本章的关键问题,让读者进行思考;之后进行解释说明;章节最后根据内容深浅,适当加入练习题,以巩固核心内容的理解。这样在阅读技巧上进行了革新,可以让读者更好地吸收与理解本书内容。在阅读过程中有任何疑问都可以和作者沟通,作者会给予及时的帮助与反馈。
本书配套教学视频与代码
本书配套教学视频与教程将同步出炉。配套视频可以在官网(www.365itedu.com)免费下载,也可以在机械工业出版社计算机分社官方微信订阅号“IT有得聊”上进行下载。在作者的引读下,希望读者朋友可以更好、更轻松地学好本书所阐述的技能。
另外,本书配套代码也会放在GIT网(https://github.com/yantingji/java-architecture-book),以便随时更新。
本书特色
1)授人以鱼,授之以渔:本书给出了架构设计技能要点、开源框架设计思想、自动化代码工具设计技巧等最基本的设计理念,希望读者能掌握并在未来架构设计中灵活运用。
2)图解技术,形象生动:避免了乏味难懂的文字描述,使繁冗复杂的事物一目了然。
3)综合能力,综合技巧:本书一部分内容是对Java EE领域技能的总结,因此给出的案例大部分具有一定的难度,希望以工程案例的形式,来引领读者领悟如何提高综合能力。
4)设实分离,开源创新:本书主要论述的是设计思想以及架构相关技术,而关于架构设计的实现部分在本书的辅助代码资料中,也就是设计与实现进行分离。辅助代码将以开源的形式公开,不但会根据需求进行相应的升级,读者朋友亦可以进行优化。这种写作方式的大胆尝试,也是一种创新。本书不单独讲理论,而是以案例驱动的形式进行实战解析,这不仅是经验与理论的总结,更重要的是希望用最佳项目案例来说明技术应用。开源精神是软件领域的一大特色,作者希望能尽到一点绵薄之力。另外,本书介绍的各种案例也给读者留下了更大的创新与扩展空间。
本书所面向的读者
本书以提高读者的综合技能、启发读者的创新能力为目标,吸收国外架构设计思想并结合国内实际情况,从架构设计者的角度系统地介绍了Java领域架构设计思想与开发技术。
本书以实用为核心,所面向的读者主要是志在成为优秀软件架构师的程序员,也适用于以下读者朋友:
1)走在架构师之路上的工程师。
2)软件项目经理。
3)对计算机技术感兴趣的在校学生。
如何最佳阅读本书
本书共15章,分为架构基本理论、架构高级技能、架构综合技能以及架构创新思维四部分。
第一部分包括第1、2章,介绍了架构模式、架构思维、架构编程思想、架构设计原则等,为软件架构设计的基本理论;第二部分包括第3~5章,介绍了架构师必备的工具体系、Java机制技能要点专题、Java后台技术栈技能要点专题以及Java八大核心架构设计体系,为软件架构设计的高级技能体系;第三部分包括第6~13章,以Spring技术为脉络,介绍了JavaWeb、SpringMVC、SpringIntegration、Spring Boot、SOAPWebService、RESTWebService以及框架测试等架构设计相关的核心技术,为软件架构设计与实现相关的综合技能体系;第四部分包括第14、15章,以开源框架以及自动化代码生成工具开发为中心,启发读者的创新思维并起到抛砖引玉的作用,为软件架构的创新技能体系。在整体内容的编排上,随着章节的展开,难度也逐步增加 。
阅读时,希望读者朋友能够自己先思考并解决书中提出的问题。因为无法展示从零到最终完成的代码编写过程,读者朋友可以先运行这些代码,在Debug状态下进行跟踪执行流程,理解后再从零开始写。也可以利用逆向思维进行学习,也就是一部分一部分地删除案例中的辅助代码(先把宽度变窄,再把深度变浅),直到精简到几个一眼就可以看明白的类为止。在做好驱动测试的情况下,一步一步把代码输入一遍,直到自己完全理解。
成为软件架构师必须掌握的知识与技能非常多,但是为了在有限的篇幅内展示最重要的核心内容,本书把大部分代码全部以辅助教材的形式进行编排,希望读者朋友能够利用好这些代码示例。本书只是重点展示了架构设计思想以及最核心的部分代码。另外,架构相关技能与架构设计的实现案例一部分安排在正文,另外一部分放在课后习题里,课后习题也是本书的重要组成部分,切莫忽视!图4Java架构技能体系
书中对一些正文外的重要知识点用温馨提示(NOTE)的形式作了补充,内容安排亦分布在各个章节的最佳位置,以便读者学习。
致谢
首先,感谢NCIT集团技术大咖杨小虎、庄茂为在百忙之中抽出宝贵时间参与技术内容的讨论与审核。
其次,感谢好友周伟鹏、尹勋成。十年来,他们和作者一起探讨了本系列教程的规划,还审核了从初级到高级所有版本的初稿。同样亦真心感谢若为投资执行董事吴冰,同事陈钢、杨晗和关宝林,以及山东老家的闫晓峰老师与兰霞老师细致耐心的审核。
再次,在作者调查研究整理的过程中,经常会把优秀的案例与文句进行记录,所以本书中的部分案例内容也参考了51CTO、博客园、CSDN、ITEYE等平台上的技术大咖博主的内容,这些作者的智慧同样为本书的写作带来了帮助,在此一并感谢。
最后,感谢爱人兰宁的大力支持。虽第三次身怀六甲,还为本书的完成给予了最大限度的支持。本系列教程的规划与完