首页>参考读物>计算机科学与技术>软件与程序设计

软件开发实践:项目驱动式的Java开发指南
作者 : [英]拉乌尔·加布里埃尔·乌尔玛(Raoul-Gabriel Urma), 理查德·沃伯顿(Richard Warburton) 著
译者 : 杜云飞 译
出版日期 : 2020-08-03
ISBN : 978-7-111-66091-0
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 200
开本 : 16
原书名 : Real-World Software Development: A Project-Driven Guide to Fundamentals in Java
原出版社: O'Reilly Media, Inc.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本实践指南提供了一种综合的、项目驱动的方式,来帮助你学习一些成为高效Java开发人员所需的核心主题。本书展示了如何开发真实项目,并同时学习最佳实践。每一章会聚焦于一个项目,该项目从一个命令行批处理程序开始,然后发展成一个功能齐全的应用程序。本书也给了你一个以面向开发者的角度去学习的机会,包含大量的代码示例。

图书特色

图书前言

掌握软件开发需要学习一组完全不同的概念。无论你是一名初级的软件开发人员,还是更有经验的开发高手,这看起来都是一个不可逾越的障碍。你是否应该花时间去学习面向对象世界中既有的主题,比如SOLID原则、设计模式或测试驱动开发?你是否应该去尝试一些越来越流行的东西,比如函数式编程?
即使你已经选择了一些主题来学习,通常也很难确定它们是如何结合在一起的。什么时候应该在项目中应用函数式编程思想?什么时候担心测试问题?如何知道在什么时候引入或改进这些技术?是否需要读一本关于这些主题的书,然后再读一些博客文章或看视频来弄清楚如何把这些主题结合在一起?该从哪里开始呢?
不用担心,本书就是来帮助你的。它将通过一个综合的、项目驱动的方式来帮助你学习。你将学习成为一名高效的开发人员所需了解的核心主题。不仅如此,我们还展示了如何将这些东西组合起来,以应用于更大的项目。
为什么写作本书
多年来,我们在教授开发人员编写代码方面积累了丰富的经验,我们都写过关于Java 8的书籍,并围绕专业软件开发运营了一些培训课程。在这个过程中,我们被认证为了Java Champion并成为多个国际会议的演讲者。
这些年我们发现许多开发人员都可以从几个核心主题的介绍或复习中受益。通过实践,通常可以很好地覆盖到设计模式、函数式编程、SOLID原则以及测试,但是很少看到它们如何良好地工作以及相互配合。人们有时甚至会因为对学习内容的选择性麻木而放弃提高自己的技能。我们不仅想教授人们核心技能,而且还要以一种容易接近和有趣的方式来做这件事。
面向开发者的方式
本书也给了你一个以面向开发者的角度去学习的机会。书中包含大量的代码示例,每当我们引入一个主题时,都会提供具体的代码示例。你可以获得书中项目的所有代码,因此,如果你想继续学习,甚至可以在集成开发环境(IDE)中单步调试书中的代码,或者运行程序来尝试它们。
涉及技术的书籍通常是以正式的、讲义式的方式编写的,那不是正常人说话的方式!本书采用会话式风格,帮助你参与到书的内容中来,而不是被居高临下地教导。
本书内容
本书每章都围绕一个软件项目展开。在每章的结尾,如果你一直在跟进,应该能够编写出那个项目。这些项目一开始是简单的命令行批处理程序,但随着复杂度的增加,它们会发展成功能齐全的应用程序。
你将从项目驱动的结构中以多种方式获益。首先,你将看到不同的编程技术如何在集成环境中协同工作。当我们在本书的最后部分看到函数式编程时,它不仅仅是抽象的集合处理操作,而是为了计算所讨论的项目中要使用的实际结果而提出的。这解决了一个问题,那就是:对于教学资料中看起来很好的想法和方法,开发人员经常会不恰当地或脱离上下文地使用它们。
其次,项目驱动的方法有助于确保在每个阶段都能看到实际的示例。教学资料中经常有很多被称为Foo的示例类和被称为bar的方法。而我们的示例与所讨论的项目相关,并展示了如何将这些想法应用到实际问题中,这些问题类似于你在职业生涯中可能会遇到的那些问题。
本书每章都是一个全新的项目,是一个学习新事物的新机会。我们希望读者能从头到尾读完本书,并且真正享受阅读的过程。这些章节以一个将要解决的挑战开始,带你去了解它的解决方案,然后通过评估你学到了什么以及如何解决这个挑战来结束。我们在每章的开头和结尾都特别指出这个挑战,以确保你清楚它的目标。
本书目标读者
我们相信,各种不同背景的开发人员都将在本书中发现一些有用和有趣的东西。而且,某些开发人员将会从这本书中获得最大的价值。
初级的软件开发人员,通常是刚从大学毕业或从事编程工作几年的开发者,我们认为他们是本书的核心读者。你将了解一些基本的主题,我们希望这些主题与你的整个软件开发生涯都是息息相关的。不要求读者一定有大学学历,但是要知道编程的基础知识,这样才能更好地利用本书。例如,我们不会解释if语句是什么或循环是什么。
你不需要了解太多关于面向对象或函数式编程的知识就可以开始阅读本书。在第2章中,除了假设你已知道类是什么并且能使用集合和泛型(例如,List)之外,我们没有做其他任何假设。我们是从基础开始的。
另一个对本书特别感兴趣的群体是正在学习Java的开发人员,他们可能熟悉其他编程语言,如C#、C++或Python。这本书帮助你快速掌握语言结构,以及编写好的Java代码所必需的原则、实践和习惯用法。
如果你是一名很有经验的Java开发人员,你可能想跳过第2章,以避免重复你已经知道的基本内容,但是第3章将会包含对许多开发人员都有用的概念和方法。
我们发现学习是软件开发中最有趣的部分之一,希望你在阅读本书时也能发现这一点。祝你阅读愉快。
排版约定
本书使用以下排版约定:
斜体(Italic)
表示新的术语、URL、电子邮箱地址、文件名和文件扩展名。
等宽字体(Constant width)
用于程序清单,以及在段落中引用的程序元素,如变量名、函数名、数据库、数据类型、环境变量、语句和关键字等。
等宽粗体(Constant width bold)
表示命令或其他应当由用户键入的文本。
等宽斜体(Constant width italic)
表示应当由用户提供的值或由上下文环境确定的值替换的文本。
该图示表示一般性的注意事项。
示例代码
可以从https://github.com/Iteratr-Learning/Real-World-Software-Development下载补充材料(示例代码、练习等)。
这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,不需要联系O’Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O’Reilly的配套CD-ROM则需要O’Reilly出版社的许可。引用本书的示例代码来回答一个问题也不需要许可,将本书中的示例代码的很大一部分放到自己的产品文档中则需要获得许可。
非常欢迎读者使用本书中的代码,希望(但不强制)你注明出处。注明出处的形式包含书名、作者、出版社和ISBN,例如:
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。
如何联系我们
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O’Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
要询问技术问题或对本书提出建议,请发送电子邮件至bookquestions@oreilly.com。
本书配套网站https://oreil.ly/RealWorld_SoftwareDev上列出了勘误表、示例以及其他信息。
关于书籍、课程、会议和新闻的更多信息,请访问我们的网站http://www.oreilly.com。
我们在Facebook上的地址:http://facebook.com/oreilly
我们在Twitter上的地址:http://twitter.com/oreillymedia
我们在YouTube上的地址:http://www.youtube.com/oreillymedia

专家评论

本书通过丰富的实战案例介绍了项目驱动式的Java开发。该书语言平易近人,逻辑自然清晰,阅读起来轻松愉快。Java特性、软件设计及架构、SOLID原则、测试等知识在此融会贯通,助你在开发之路上平步青云。
—清华大学博士,畅销书作者,Java畅销书译者,肖智清
“大道易得,小术难求”,大部分时候,我们需要的不是大道,因为即使道理都对,但不经过自己的手去实践过,还是会沦落到“道理都懂,但还是过不好这一生”的境地。本书不一样,本书反转了角度,从实际场景出发,从问题到分析到解决到最后总结,一步一步地共同拆解问题、解决问题并总结升华,这其实才是做事情的正确路径。强烈推荐在Java和工程领域有追求的各位同学阅读此书!
—前挖财首席架构师,《Spring揭秘》&《SpringBoot揭秘》作者,王福强
用具体的示例来阐述如何编写软件并使之更易于维护,有助于功能演进、代码维护和长期迭代,而不是疲于应对填坑!
编写伴随时间飞逝仍能轻松演进的可靠代码,除了注释之外,更要注重自动化测试,熟能生巧,动手编程,唯实践也!
尝试新技术,实现系统功能或解决实际问题是编程带来的乐趣,本书以项目驱动形式来让大家从软件开发中得到乐趣!
—IBM高级技术顾问,《Effective Java中文版》译者,俞黎敏
作为软件从业人员,我们都知道优秀的设计对于软件的可维护性、质量、性能都是至关重要的,所以大家都会通过学习设计模式、最佳实践等方式,让自己的代码变得更好。但市面上的很多相关图书,要么是介绍特定语言的语法特性,要么空洞地介绍设计理论,读者缺少一本真正贴近实战的讲解软件设计的图书。本书恰好填补了这一空白,作者以实际项目作为驱动,深入浅出地讲解了什么才是好的设计,如何才能交付更好的软件。
—软件设计师,知名图书译者,InfoQ社区编辑,张卫滨

上架指导

计算机\程序设计

封底文字

如果你刚刚开始你的Java职业生涯,掌握当今的许多软件开发概念可能会让你不知所措。你是否应该学习面向对象的实践,比如测试驱动开发或者应用函数式编程思想?本书提供了一种综合的、项目驱动的方式,帮助你学习一些成为高效开发人员所需的核心主题。
作者在本书中向你展示了如何开发真实项目,并同时学习最佳实践。每一章会聚焦于一个项目,该项目从一个命令行批处理程序开始,然后发展成一个功能齐全的应用程序。如果能够编写基本的Java代码,那么你将学习先进的软件开发实践,以构建现代的、健壮的和可维护的Java软件。
通过阅读本书,你将能够:
? 了解编写可维护代码的核心设计原则。
? 增加代码库的灵活性,提升代码可维护性,以及处理异常。
? 理解如何应用耦合、内聚和SOLID原则。
? 使用测试驱动开发来处理新的设计问题。
? 从外到内思考:从全局转移到应用程序领域的核心。
? 了解函数式编程并学习如何在Java中使用它。

“ 本书填补了市场上的一个重要空白。如果你是刚从大学或代码训练营毕业的学生,正在寻找你的第一份Java工作,那么你应该购买这本书。它架起了编程练习和专业软件工程师日常工作之间的桥梁。”
——Ben Evans
Java Champion,
New Relic公司的首席工程师

Raoul-Gabriel Urma博士是Cambridge Spark(一家领先的面向数据科学家的培训机构)的CEO和创始人。他还是几本编程书籍的作者,包括畅销书Modern Java in Action(Manning出版社)。
Richard Warburton博士是Opsian(一
家先进的性能工具公司)的CTO、
Artio FIX引擎的维护者。他还是畅销书作家和多个会议的演讲嘉宾。

作者简介

[英]拉乌尔·加布里埃尔·乌尔玛(Raoul-Gabriel Urma), 理查德·沃伯顿(Richard Warburton) 著:拉乌尔·加布里埃尔·乌尔玛(Raoul-Gabriel Urma)博士是Cambridge Spark的CEO和创始人,该公司是数据科学和人工智能培训领域的领导者。他出版过几本编程书籍,包括畅销书Modern Java in Action (Manning出版社)。Raoul拥有剑桥大学计算机科学博士学位和伦敦帝国理工学院计算机科学硕士学位,并以一等荣誉毕业,曾多次获得技术创新奖项。他的研究兴趣包括编程语言、编译器、源代码分析、机器学习和教育领域。他在2017年被提名为Oracle Java Champion,同时也是一位经验丰富的国际会议演讲者,发表过涉及Java、Python、人工智能和商业的演讲。Raoul曾经为几个大型软件工程项目的组织提供咨询,包括Google、Oracle、eBay和Goldman Sachs。
理查德·沃伯顿(Richard Warburton)博士是Opsian.com的联合创始人,也是Artio FIX引擎的维护者。他曾在不同领域担任开发人员,包括开发工具、高频交易和网络协议。他为O''Reilly编写了Java 8 Lambdas一书,并通过http://iteratrlearning.com和http://www.pluralsight.com/author/richard-warburton帮助开发人员进行学习。Richard 是一位经验丰富的会议演讲者,曾在数十个活动中发表演讲,并在欧洲和美国一些大型会议的委员会中担任委员。他拥有华威大学计算机科学博士学位。

译者序

Java作为OOP(面向对象编程)的集大成者,融合了其他语言的诸多优点,在经历了多个版本更新之后,它也重新焕发出新的生机,特别是Java 8的发布,更是让开发者体验到了函数式编程的精妙及强大之处。而随着这几年开源社区的蓬勃发展,越来越多的组件、框架、方案如雨后春笋般涌现,现代工程师们大多不用再像前辈们那样从零开始编写代码,而是更多地将精力放在业务功能的实现上,这在很大程度上提高了软件开发的效率。特别是在Java方面,其技术体系之庞大,解决方案之丰富,完全超出任何其他语言平台,可以说,我们遇到任何一种“钉子”,都能随手找到一大堆“锤子”。但同时我们也会发现,开发中所遇到的很多问题也并非一个新框架、新方案能完全解决的。以代码级别的扩展性、可维护性等问题为例,它考察的是工程师对常见设计原则、模式的理解,以及对软件工程最佳实践的掌握程度,而这才是工程师真正的核心竞争力!
所以我一直认为,工程师在学习编程技术时,除了要详细了解编程语言的核心API、组件和框架之外,还应该去探索编程语言的最佳开发模式,就像习武之人一样,招数重要,但内功心法更重要。幸运的是,编程语言发展数年,前辈们留下很多已被无数次证明的最佳实践,这些实践经过时间的沉淀和打磨,逐渐形成一套基本的设计原则,它们是超越框架,甚至是超越语言的存在。作为现代工程师,想要获取这些资料易如反掌。由于设计原则或设计模式都是经过高度抽象和提炼形成的,初学者非常容易被各种“概念”“词汇”带偏。目前市面上很多模式相关的书籍资料,为了让工程师便于理解,其示例代码都力求简单直接,甚至做了非常多的不切实际的具象化(拟人拟物)。所以现实情况是,很少有资料是以真实的项目迭代为蓝本进行讲解的,这会导致大家“即使懂很多道理,但仍写不好代码”。
而这本书填补了这方面的空白。首先,本书是以项目驱动式的方式来讲解的,即核心章节都会根据一个项目案例来引出开发过程中遇到的问题,然后引导读者一起去思考这些问题的解决方案,甚至包括一些设计权衡上的讨论。这种结合具体的业务场景进行反复验证、持续迭代的讲解方式,能让读者有身临其境之感。其次,本书在内容上涵盖了工程师必知必会的一些基本设计原则或模式,比如SOLID原则。SOLID是一组旨在帮助开发易于维护的软件的原则集,包括:单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)、依赖倒置原则(DIP)。书中并不会很生硬地介绍每个原则,而是会根据实际情况来引出这些原则的使用方式。最后,本书还介绍了TDD(测试驱动开发)、流式API、函数式编程等目前比较流行的主题,相信大家同样会有所收获。
当然,由于篇幅有限,本书不可能全面介绍上述所有内容,很多时候只是给读者指明一个思考的方向,同时在很多问题上,作者并不会很武断地表达出对某种设计选型上的肯定或否定。一般情况下,我们需要根据实际情况做出选型上的权衡,以找出当下的最优解。假如我们总是期望在最开始就能找到一个绝对正确的答案,很可能会失望而归。
本书的两位作者在Java领域都有一定的造诣,他们曾在多个大型国际会议上发表过精彩的主旨演讲,同时也是多本畅销书的作者,比如Raoul-Gabriel Urma博士曾出版过《Java 8实战》,而Richard Warburton博士曾出版过《Java 8函数式编程》,这两本书可谓是学习Java 8的必备资料,大家应该都比较熟悉。由如此经验丰富的作者来执笔,本书在质量上也是经得起推敲的。
由于我是第一次翻译整书,所以刚拿到原著时,比较担心自己能否准确地呈现原著之意,好在快速读完原著之后,发现书中所讲内容也是自己多年来心中所思所想,所以翻译过程比较顺利,竟然实现了人生第一次提前交稿。不过由于译者水平有限,书中所译内容难免存在词不达意的情况,在此也请各位读者朋友批评指正。我的邮箱是angel6380@126.com,对书中有任何疑问,都可以通过该邮箱联系我,谢谢!
在本书的翻译工作完成之际,我首先要感谢机械工业出版社华章分社王春华老师的信任,在今年年初,正是她询问我是否有兴趣翻译本书,最终才促成了这次合作。然后非常感谢本书的责任编辑李忠明老师,在翻译过程中他帮我解答了大量问题。
最后,感谢家人、朋友的支持与陪伴,你们是我前进路上的最大动力!

推荐序

软件开发是互联网、软件、工业等行业中最核心的智力活动。需要从业者具备知识的大量输入和高度聚合能力,并在实际业务中,充分运用在软件工程基础理论和实践两大方向所学所感的多种技能。软件工程基础理论的核心是对编程语言和设计模式、设计原则的深刻理解,并将两者融会贯通。工程实践是对各种方法论的理解和使用。
本书通过各章实例,很好地向读者传授了基础和实践相结合的实践方法。项目驱动下的软件设计不再是空谈,我们耳熟能详的SOLID原则、KISS原则、DRY等理论,在各章的实例中准确地指导了项目案例的设计。同时,作者在每章的实践中,展示了在设计模式和原则的指导下,如何优雅地完成编码。
此外,本书还从实践角度展示了工程构建(Gradle)和测试驱动开发(TDD)。通常实际的业务项目都是模块化的,如何利用构建工具对项目进行编译、调试、构建、分发,如何运用TDD等理论实现快速迭代和持续交付,这些都是开发者的基本修养。这本书虽然没有面面俱到地讲到工程实践的完整技术栈,但是开而弗达,将读者引到以工程项目为主视角的设计和开发的正确道路上来。
对初学者来说,通过阅读本书,可以在较短的时间内对软件开发有较清晰的理解,并能产生与自身结合的学习路线图。对于有一些工作经验的开发者来说,本书可以帮助你梳理这些年积累的理论和实践,温故而知新,然后再出发。
—阿里巴巴资深Java技术专家,韩陆

图书目录

前言1
第1章 开始旅程吧7
1.1 主题7
1.2 章节概要9
1.3 迭代10
第2章 银行账单分析器11
2.1 挑战11
2.2 目标11
2.3 银行账单分析器需求12
2.4 KISS原则12
2.5 代码可维护性和反模式15
2.6 单一职责原则16
2.7 内聚21
2.8 耦合27
2.9 测试30
2.10 要点35
2.11 迭代35
2.12 完成这个挑战36
第3章 扩展银行账单分析器37
3.1 挑战37
3.2 目标37
3.3 银行账单分析器的扩展需求38
3.4 开闭原则38
3.5 接口陷阱42
3.6 显式API和隐式API44
3.7 多样化导出 47
3.8 异常处理51
3.9 使用构建工具61
3.10 要点68
3.11 迭代68
3.12 完成这个挑战68
第4章 文档管理系统69
4.1 挑战69
4.2 目标69
4.3 文档管理系统需求70
4.4 充实这个设计70
4.5 里氏替换原则77
4.6 可选方案79
4.7 扩展和重用代码81
4.8 保持测试健康86
4.9 要点95
4.10 迭代96
4.11 完成这个挑战96
第5章 业务规则引擎97
5.1 挑战97
5.2 目标97
5.3 业务规则引擎需求98
5.4 测试驱动开发99
5.5 mocking102
5.6 添加条件104
5.7 流式API设计115
5.8 要点120
5.9 迭代120
5.10 完成这个挑战121
第6章 Twootr122
6.1 挑战122
6.2 目标122
6.3 Twootr的需求123
6.4 设计概述124
6.5 从事件到设计126
6.6 从哪里开始129
6.7 密码和安全性134
6.8 关注者和twoot136
6.9 位置145
6.10 要点151
6.11 迭代151
6.12 完成这个挑战151
第7章 扩展Twootr152
7.1 挑战152
7.2 目标152
7.3 回顾152
7.4 持久性和存储库模式153
7.5 函数式编程160
7.6 用户界面173
7.7 依赖倒置和依赖注入174
7.8 包和系统构建177
7.9 限制和简化179
7.10 要点180
7.11 迭代180
7.12 完成这个挑战180
第8章 总结181
8.1 基于项目的结构181
8.2 迭代181
8.3 刻意练习182
8.4 下一步及附加资源183

教学资源推荐
作者: (美)Richard C.Detmer
作者: 吴黎兵 熊建强 杨鏖丞
作者: 刘艺
作者: 尹宝林
参考读物推荐
作者: [德] 彼得?普林茨(Peter Prinz),托尼?克劳福德(Tony Crawford)著
作者: (美)Matthew A. Russell 著
作者: (美)Allen B. Downey著