Support Statistics
¥.00 ·
0times
Text Preview (First 20 pages)
Registered users can read the full content for free
Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.
Page
1
(This page has no text content)
Page
2
O’Reilly精品图书系列 软件开发实践:项目驱动式的Java开发指南 Real-World Software Development: A Project- Driven Guide to Fundamentals in Java (英)拉乌尔·加布里埃尔·乌尔玛(Raoul-Gabriel Urma) (英)理查德·沃伯顿(Richard Warburton) 著 杜云飞 译 ISBN:978-7-111-66091-0 本书纸版由机械工业出版社于2020年出版,电子版由华章分社(北京 华章图文信息有限公司,北京奥维博世图书发行有限公司)在中华人 民共和国境内(不包括中国香港、澳门特别行政区及中国台湾地区) 制作与发行。 版权所有,侵权必究 客服热线:+ 86-10-68995265 客服信箱:service@bbbvip.com
Page
3
官方网址:www.hzmedia.com.cn 新浪微博 @华章数媒 微信公众号 华章电子书(微信号:hzebook)
Page
4
O’Reilly Media,Inc.介绍 O’Reilly以“分享创新知识、改变世界”为己任。40多年来我们 一直向企业、个人提供成功所必需之技能及思想,激励他们创新并做 得更好。 O’Reilly业务的核心是独特的专家及创新者网络,众多专家及创 新者通过我们分享知识。我们的在线学习(Online Learning)平台提 供独家的直播培训、图书及视频,使客户更容易获取业务成功所需的 专业知识。几十年来O’Reilly图书一直被视为学习开创未来之技术的 权威资料。我们每年举办的诸多会议是活跃的技术聚会场所,来自各 领域的专业人士在此建立联系,讨论最佳实践并发现可能影响技术行 业未来的新趋势。 我们的客户渴望做出推动世界前进的创新之举,我们希望能助他 们一臂之力。 业界评论 “O’Reilly Radar博客有口皆碑。” ——Wired
Page
5
“O’Reilly凭借一系列非凡想法(真希望当初我也想到了)建立 了数百万美元的业务。” ——Business 2.0 “O’Reilly Conference是聚集关键思想领袖的绝对典范。” ——CRN “一本O’Reilly的书就代表一个有用、有前途、需要学习的主 题。” ——Irish Times “Tim是位特立独行的商人,他不光放眼于最长远、最广阔的领 域,并且切实地按照Yogi Berra的建议去做了:‘如果你在路上遇到岔 路口,那就走小路。’回顾过去,Tim似乎每一次都选择了小路,而 且有几次都是一闪即逝的机会,尽管大路也不错。” ——Linux Journal
Page
6
本书赞誉 本书通过丰富的实战案例介绍了项目驱动式的Java开发。该书语 言平易近人,逻辑自然清晰,阅读起来轻松愉快。Java特性、软件设 计及架构、SOLID原则、测试等知识在此融会贯通,助你在开发之路 上平步青云。 ——清华大学博士,畅销书作者,Java畅销书译者,肖智清 “大道易得,小术难求”,大部分时候,我们需要的不是大道, 因为即使道理都对,但不经过自己的手去实践过,还是会沦落到“道 理都懂,但还是过不好这一生”的境地。本书不一样,本书反转了角 度,从实际场景出发,从问题到分析到解决到最后总结,一步一步地 共同拆解问题、解决问题并总结升华,这其实才是做事情的正确路 径。强烈推荐在Java和工程领域有追求的各位同学阅读此书! ——前挖财首席架构师,《Spring揭秘》&《SpringBoot揭秘》作者, 王福强 用具体的示例来阐述如何编写软件并使之更易于维护,有助于功 能演进、代码维护和长期迭代,而不是疲于应对填坑!
Page
7
编写伴随时间飞逝仍能轻松演进的可靠代码,除了注释之外,更 要注重自动化测试,熟能生巧,动手编程,唯实践也! 尝试新技术,实现系统功能或解决实际问题是编程带来的乐趣, 本书以项目驱动形式来让大家从软件开发中得到乐趣! ——IBM高级技术顾问,《Effective Java中文版》译者,俞黎敏 作为软件从业人员,我们都知道优秀的设计对于软件的可维护 性、质量、性能都是至关重要的,所以大家都会通过学习设计模式、 最佳实践等方式,让自己的代码变得更好。但市面上的很多相关图 书,要么是介绍特定语言的语法特性,要么空洞地介绍设计理论,读 者缺少一本真正贴近实战的讲解软件设计的图书。本书恰好填补了这 一空白,作者以实际项目作为驱动,深入浅出地讲解了什么才是好的 设计,如何才能交付更好的软件。 ——软件设计师,知名图书译者,InfoQ社区编辑,张卫滨
Page
8
推荐序 软件开发是互联网、软件、工业等行业中最核心的智力活动。需 要从业者具备知识的大量输入和高度聚合能力,并在实际业务中,充 分运用在软件工程基础理论和实践两大方向所学所感的多种技能。软 件工程基础理论的核心是对编程语言和设计模式、设计原则的深刻理 解,并将两者融会贯通。工程实践是对各种方法论的理解和使用。 本书通过各章实例,很好地向读者传授了基础和实践相结合的实 践方法。项目驱动下的软件设计不再是空谈,我们耳熟能详的SOLID 原则、KISS原则、DRY等理论,在各章的实例中准确地指导了项目案 例的设计。同时,作者在每章的实践中,展示了在设计模式和原则的 指导下,如何优雅地完成编码。 此外,本书还从实践角度展示了工程构建(Gradle)和测试驱动 开发(TDD)。通常实际的业务项目都是模块化的,如何利用构建工 具对项目进行编译、调试、构建、分发,如何运用TDD等理论实现快 速迭代和持续交付,这些都是开发者的基本修养。这本书虽然没有面 面俱到地讲到工程实践的完整技术栈,但是开而弗达,将读者引到以 工程项目为主视角的设计和开发的正确道路上来。
Page
9
对初学者来说,通过阅读本书,可以在较短的时间内对软件开发 有较清晰的理解,并能产生与自身结合的学习路线图。对于有一些工 作经验的开发者来说,本书可以帮助你梳理这些年积累的理论和实 践,温故而知新,然后再出发。 ——阿里巴巴资深Java技术专家,韩陆
Page
10
译者序 Java作为OOP(面向对象编程)的集大成者,融合了其他语言的 诸多优点,在经历了多个版本更新之后,它也重新焕发出新的生机, 特别是Java 8的发布,更是让开发者体验到了函数式编程的精妙及强大 之处。而随着这几年开源社区的蓬勃发展,越来越多的组件、框架、 方案如雨后春笋般涌现,现代工程师们大多不用再像前辈们那样从零 开始编写代码,而是更多地将精力放在业务功能的实现上,这在很大 程度上提高了软件开发的效率。特别是在Java方面,其技术体系之庞 大,解决方案之丰富,完全超出任何其他语言平台,可以说,我们遇 到任何一种“钉子”,都能随手找到一大堆“锤子”。但同时我们也 会发现,开发中所遇到的很多问题也并非一个新框架、新方案能完全 解决的。以代码级别的扩展性、可维护性等问题为例,它考察的是工 程师对常见设计原则、模式的理解,以及对软件工程最佳实践的掌握 程度,而这才是工程师真正的核心竞争力! 所以我一直认为,工程师在学习编程技术时,除了要详细了解编 程语言的核心API、组件和框架之外,还应该去探索编程语言的最佳 开发模式,就像习武之人一样,招数重要,但内功心法更重要。幸运 的是,编程语言发展数年,前辈们留下很多已被无数次证明的最佳实 践,这些实践经过时间的沉淀和打磨,逐渐形成一套基本的设计原
Page
11
则,它们是超越框架,甚至是超越语言的存在。作为现代工程师,想 要获取这些资料易如反掌。由于设计原则或设计模式都是经过高度抽 象和提炼形成的,初学者非常容易被各种“概念”“词汇”带偏。目 前市面上很多模式相关的书籍资料,为了让工程师便于理解,其示例 代码都力求简单直接,甚至做了非常多的不切实际的具象化(拟人拟 物)。所以现实情况是,很少有资料是以真实的项目迭代为蓝本进行 讲解的,这会导致大家“即使懂很多道理,但仍写不好代码”。 而这本书填补了这方面的空白。首先,本书是以项目驱动式的方 式来讲解的,即核心章节都会根据一个项目案例来引出开发过程中遇 到的问题,然后引导读者一起去思考这些问题的解决方案,甚至包括 一些设计权衡上的讨论。这种结合具体的业务场景进行反复验证、持 续迭代的讲解方式,能让读者有身临其境之感。其次,本书在内容上 涵盖了工程师必知必会的一些基本设计原则或模式,比如SOLID原 则。SOLID是一组旨在帮助开发易于维护的软件的原则集,包括:单 一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接 口隔离原则(ISP)、依赖倒置原则(DIP)。书中并不会很生硬地介 绍每个原则,而是会根据实际情况来引出这些原则的使用方式。最 后,本书还介绍了TDD(测试驱动开发)、流式API、函数式编程等 目前比较流行的主题,相信大家同样会有所收获。
Page
12
当然,由于篇幅有限,本书不可能全面介绍上述所有内容,很多 时候只是给读者指明一个思考的方向,同时在很多问题上,作者并不 会很武断地表达出对某种设计选型上的肯定或否定。一般情况下,我 们需要根据实际情况做出选型上的权衡,以找出当下的最优解。假如 我们总是期望在最开始就能找到一个绝对正确的答案,很可能会失望 而归。 本书的两位作者在Java领域都有一定的造诣,他们曾在多个大型 国际会议上发表过精彩的主旨演讲,同时也是多本畅销书的作者,比 如Raoul-Gabriel Urma博士曾出版过《Java 8实战》,而Richard Warburton博士曾出版过《Java 8函数式编程》,这两本书可谓是学习 Java 8的必备资料,大家应该都比较熟悉。由如此经验丰富的作者来执 笔,本书在质量上也是经得起推敲的。 由于我是第一次翻译整书,所以刚拿到原著时,比较担心自己能 否准确地呈现原著之意,好在快速读完原著之后,发现书中所讲内容 也是自己多年来心中所思所想,所以翻译过程比较顺利,竟然实现了 人生第一次提前交稿。不过由于译者水平有限,书中所译内容难免存 在词不达意的情况,在此也请各位读者朋友批评指正。我的邮箱是 angel6380@126.com,对书中有任何疑问,都可以通过该邮箱联系我, 谢谢!
Page
13
在本书的翻译工作完成之际,我首先要感谢机械工业出版社华章 公司王春华老师的信任,在今年年初,正是她询问我是否有兴趣翻译 本书,最终才促成了这次合作。然后非常感谢本书的责任编辑李忠明 老师,在翻译过程中他帮我解答了大量问题。 最后,感谢家人、朋友的支持与陪伴,你们是我前进路上的最大 动力!
Page
14
前言 掌握软件开发需要学习一组完全不同的概念。无论你是一名初级 的软件开发人员,还是更有经验的开发高手,这看起来都是一个不可 逾越的障碍。你是否应该花时间去学习面向对象世界中既有的主题, 比如SOLID原则、设计模式或测试驱动开发?你是否应该去尝试一些越 来越流行的东西,比如函数式编程? 即使你已经选择了一些主题来学习,通常也很难确定它们是如何 结合在一起的。什么时候应该在项目中应用函数式编程思想?什么时 候担心测试问题?如何知道在什么时候引入或改进这些技术?是否需 要读一本关于这些主题的书,然后再读一些博客文章或看视频来弄清 楚如何把这些主题结合在一起?该从哪里开始呢? 不用担心,本书就是来帮助你的。它将通过一个综合的、项目驱 动的方式来帮助你学习。你将学习成为一名高效的开发人员所需了解 的核心主题。不仅如此,我们还展示了如何将这些东西组合起来,以 应用于更大的项目。 为什么写作本书
Page
15
多年来,我们在教授开发人员编写代码方面积累了丰富的经验, 我们都写过关于Java 8的书籍,并围绕专业软件开发运营了一些培训 课程。在这个过程中,我们被认证为了Java Champion并成为多个国际 会议的演讲者。 这些年我们发现许多开发人员都可以从几个核心主题的介绍或复 习中受益。通过实践,通常可以很好地覆盖到设计模式、函数式编 程、SOLID原则以及测试,但是很少看到它们如何良好地工作以及相互 配合。人们有时甚至会因为对学习内容的选择性麻木而放弃提高自己 的技能。我们不仅想教授人们核心技能,而且还要以一种容易接近和 有趣的方式来做这件事。 面向开发者的方式 本书也给了你一个以面向开发者的角度去学习的机会。书中包含 大量的代码示例,每当我们引入一个主题时,都会提供具体的代码示 例。你可以获得书中项目的所有代码,因此,如果你想继续学习,甚 至可以在集成开发环境(IDE)中单步调试书中的代码,或者运行程序 来尝试它们。 涉及技术的书籍通常是以正式的、讲义式的方式编写的,那不是 正常人说话的方式!本书采用会话式风格,帮助你参与到书的内容中 来,而不是被居高临下地教导。
Page
16
本书内容 本书每章都围绕一个软件项目展开。在每章的结尾,如果你一直 在跟进,应该能够编写出那个项目。这些项目一开始是简单的命令行 批处理程序,但随着复杂度的增加,它们会发展成功能齐全的应用程 序。 你将从项目驱动的结构中以多种方式获益。首先,你将看到不同 的编程技术如何在集成环境中协同工作。当我们在本书的最后部分看 到函数式编程时,它不仅仅是抽象的集合处理操作,而是为了计算所 讨论的项目中要使用的实际结果而提出的。这解决了一个问题,那就 是:对于教学资料中看起来很好的想法和方法,开发人员经常会不恰 当地或脱离上下文地使用它们。 其次,项目驱动的方法有助于确保在每个阶段都能看到实际的示 例。教学资料中经常有很多被称为Foo的示例类和被称为bar的方法。 而我们的示例与所讨论的项目相关,并展示了如何将这些想法应用到 实际问题中,这些问题类似于你在职业生涯中可能会遇到的那些问 题。 本书每章都是一个全新的项目,是一个学习新事物的新机会。我 们希望读者能从头到尾读完本书,并且真正享受阅读的过程。这些章 节以一个将要解决的挑战开始,带你去了解它的解决方案,然后通过
Page
17
评估你学到了什么以及如何解决这个挑战来结束。我们在每章的开头 和结尾都特别指出这个挑战,以确保你清楚它的目标。 本书目标读者 我们相信,各种不同背景的开发人员都将在本书中发现一些有用 和有趣的东西。而且,某些开发人员将会从这本书中获得最大的价 值。 初级的软件开发人员,通常是刚从大学毕业或从事编程工作几年 的开发者,我们认为他们是本书的核心读者。你将了解一些基本的主 题,我们希望这些主题与你的整个软件开发生涯都是息息相关的。不 要求读者一定有大学学历,但是要知道编程的基础知识,这样才能更 好地利用本书。例如,我们不会解释if语句是什么或循环是什么。 你不需要了解太多关于面向对象或函数式编程的知识就可以开始 阅读本书。在第2章中,除了假设你已知道类是什么并且能使用集合和 泛型(例如,List<String>)之外,我们没有做其他任何假设。我们 是从基础开始的。 另一个对本书特别感兴趣的群体是正在学习Java的开发人员,他 们可能熟悉其他编程语言,如C#、C++或Python。这本书帮助你快速掌
Page
18
握语言结构,以及编写好的Java代码所必需的原则、实践和习惯用 法。 如果你是一名很有经验的Java开发人员,你可能想跳过第2章,以 避免重复你已经知道的基本内容,但是第3章将会包含对许多开发人员 都有用的概念和方法。 我们发现学习是软件开发中最有趣的部分之一,希望你在阅读本 书时也能发现这一点。祝你阅读愉快。 排版约定 本书使用以下排版约定: 斜体(Italic) 表示新的术语、URL、电子邮箱地址、文件名和文件扩展名。 等宽字体(Constant width) 用于程序清单,以及在段落中引用的程序元素,如变量名、函数 名、数据库、数据类型、环境变量、语句和关键字等。 等宽粗体(Constant width bold) 表示命令或其他应当由用户键入的文本。
Page
19
等宽斜体(Constant width italic) 表示应当由用户提供的值或由上下文环境确定的值替换的文本。 该图示表示一般性的注意事项。 示例代码 可以从https://github.com/Iteratr-Learning/Real-World- Software-Development下载补充材料(示例代码、练习等)。 这里的代码是为了帮助你更好地理解本书的内容。通常,可以在 程序或文档中使用本书中的代码,不需要联系O’Reilly获得许可,除 非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来 编写一个程序不需要得到我们的许可,但销售或发布O’Reilly的配套 CD-ROM则需要O’Reilly出版社的许可。引用本书的示例代码来回答一 个问题也不需要许可,将本书中的示例代码的很大一部分放到自己的 产品文档中则需要获得许可。 非常欢迎读者使用本书中的代码,希望(但不强制)你注明出 处。注明出处的形式包含书名、作者、出版社和ISBN,例如:
Page
20
Real-World Sofware Development,作者Raoul-Gabriel Urma和 Richard Warburton,由O’Reilly出版,书号978-1-491-96717-1 如果读者觉得对示例代码的使用超出了上面所给出的许可范围, 欢迎通过permission@oreilly.com联系我们。 O’Reilly在线学习平台(O’Reilly Online Learning) 近40年来,O’Reilly Media致力于提供技术和商 业培训、知识和卓越见解,来帮助众多公司取得成功。 我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图 书、文章、会议和我们的在线学习平台分享他们的知识和经验。 O’Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习 路径、交互式编程环境,以及O’Reilly和200多家其他出版商提供的 大量文本和视频资源。有关的更多信息,请访问 http://oreilly.com。 如何联系我们 对于本书,如果有任何意见或疑问,请按照以下地址联系本书出 版商。
Comments 0
Loading comments...
Reply to Comment
Edit Comment