您的浏览历史

软件设计精要与模式(第2版)

  • 定价 : ¥55.00
  • 会员价 : ¥41.25(75折)
促销活动
  • [本书]参加电子工业出版社 满58元赠书活动

基本信息

编辑推荐

“给我一个支点,我就能撬起地球”
关键不在于力量有多大,而在于如何合理地利用力量。
软件设计同样如此
思想的确立,技巧的把握,将在很大程度上制约软件架构的合理性。本书力图通过大量的项目实践,并与软件设计思想完美结合,充分展示软件设计之美,以及设计“力量”的巧妙运用。

内容简介回到顶部↑

本书关注的焦点是软件设计,涵盖了大部分与设计有关的基本要素,包括面向对象思想、设计模式、重构、测试驱动开发、极限编程以及软件体系架构。其中,尤以设计模式为主,深入探讨了软件设计过程中的原则与模式,并结合大量的实例与代码演示了如何合理运用设计模式,改善程序模块的可复用性、可扩展性,实现模块间的松散耦合。全书将软件设计理论与项目实践完美地结合起来,使其告别了纯理论研究的空泛,具有现实的指导意义。
本书适用于所有希望提高软件设计水平的程序员、软件工程师,同时,对于软件设计师与系统架构师也具有一定的参考价值。

作译者回到顶部↑

作者: 张逸
张逸,软件架构师,敏捷教练,微软最有价值专家,InfoQ.NET社区常务编辑,msup资深讲师。目前担任中软国际ETC(重庆)技术总监。主要专注于软件架构、设计模式、领域驱动设计和敏捷开发,以及基于.NET平台的企业级系统应用开发和分布式开发。曾先后为可口可乐、摩托罗拉、HP、京东方、尼桑、摩洛哥电信、盛大、第九城市、CA、携程等企业提供设计、开发、咨询与培训服务。他的著译作包括《软件设计精要与模式》、《WCF服务编程》。可以通过hnp://www.agiledon.com访问他的个人网站。.. << 查看详细

[同作者作品]
软件设计精要与模式(第2版)

目录回到顶部↑

第1篇 设 计 之 要
第1章 设计之道 2
1.1 计划的设计与演进的设计 2
1.2 架构的标准 4
1.3 过度设计,还是简单设计 7
1.4 需要设计模式吗 9
1.5 重构是必然的 10
1.6 UML重要吗 11
1.7 测试驱动开发 12
第2章 对象法则 14
2.1 面向对象思想 14
2.2 面向对象核心要素 15
2.2.1 封装 15
2.2.2 继承 18
2.2.3 多态 21
2.3 面向对象设计原则 23
2.3.1 单一职责原则 23
2.3.2 开放封闭原则 27
2.3.3 Liskov替换原则 29
2.3.4 依赖倒置原则 30

前言回到顶部↑

我希望告别冗长的前言,仅述说第2版的变更。写作第2版的我,疯狂地吸收了诸多大师的设计思想,这一点可以从参考文献的前后差别看到端倪。这两年以来,我又参与了几个项目的设计与开发工作,所谓“实践出真知”,在佐证大师观点的同时,自己对设计的认识更进了一步。或许,第2版不会比第1版优秀太多,但至少会减少诸多不足。囿于版本,我无法做出新的突破。我期待能创作一本全新的书,全面论述我对软件设计的认识。现在的我,还不足以写出梦想中的软件设计之道。
言归正传。
整体而言,我对第1版的所有章节都进行了一定程度的修订。或者更正了过去的错误,或者进一步完善了原有内容。本书的内容仍然是散漫而自由的,然而形散而神不散,大体遵循了设计的基本原则。
在第1篇“设计之要”中,我新增了“对象法则”一章,言简意赅地介绍了面向对象思想的核心要素与设计原则。这基于我的一贯理念,即设计模式的核心本质是面向对象设计思想的运用。只有掌握了面向对象设计思想,才能真正体会设计模式的精髓,并将其运用在实际的项目开发过程中。“对象法则”一章可以有机地与“封装变化”一章结合起来,再加上第23章“软件体系架构”的内容,基本上勾勒出软件设计的脉络,从面向对象思想到设计模式,再到软件体系架构。
在“封装变化”一章中,我不仅完善了项目实例,还增加了关于如何“解耦具体依赖”的几种技巧。对于软件设计而言,这是非常有益的指导。我整个儿删去了第1版的第5章“设计,由你掌握”,并将其中的部分内容转移到“封装变化”一章中。这使得第1篇的内容更为紧凑,虽然删去了讨论极限编程的相关内容,却可以使得我们能够更加关注于设计,而不是方法学。
第2篇“.NET框架与设计模式”增加了对.NET 3.X的源代码分析。我无法做到与时俱进,因为.NET 4.0即将走进.NET开发人员的程序生活。或许在本书出版之后的不久,还会有5.0,6.0……我只是希望我的书不要被时代抛弃得太远。好在设计模式本身属于经典,而经典总是能够经得起时间考验的。本书讲述经典,自然能讨得一定好处。
更新最明显的是迭代器模式在.NET中的实现。C# 2.0引入的yield return以及.NET 3.0引入的Lambda表达式都为迭代器模式在.NET中成为一种惯用法贡献了一份心力。我对此的分析,可以在一定程度上帮助读者更好地理解迭代器模式。在第2篇中,我新增了一章“.NET中的命令模式”,通过解析.NET 3.0引入的WF(Windows Workflow Foundation),展现命令模式的非凡价值。第2篇的内容虽然与.NET平台息息相关,但对于其他平台的开发人员而言,仍有可观之处。我在撰写本书第2版时,同样参考了Java平台的设计理念,以及Ruby中的设计模式。
从章节名称来看,我对第3篇“媒体播放器的设计之旅”进行了颠覆性的革新。事实不然,虽然内容仍有调整,但并未动摇其根本。在对本篇进行修订时,我扮演了一名重构者的角色,利用重命名和搬移内容的方法,极大地改善了既有章节的合理性。我抛开原有的以设计模式为核心的论述方式,转而从软件设计的角度看待问题。模拟真实的软件开发,我讨论了如何运用面向对象设计思想,如何对接口进行分离。当客户需要引入第三方软件时,我提出了接口适配的方案。当需求发生变化时,我则对接口行为进行了扩展或装饰。
第4篇“设计模式应用实践”仍然体现了本书的重要价值。我对第18章“命令模式应用”的实例进行了极大的完善,使得该实例在表现命令模式方面,更加丰富与完整。第19章“职责链模式应用”完全面貌一新,替换为最近完成的一个项目实例,并通过对领域进行建模,辅以用例图、时序图、通信图和类图推导详细设计,展现了“用例驱动开发”设计思想的冰山一角。
本书对软件架构着墨不多,主要的架构思想均放在第5篇“.NET体系架构”中。利用PetShop实例,对于指导读者初窥架构之美,仍有不可低估的作用。第2版对软件体系架构的内容有所补充与增强,更多地引入了企业应用架构模式和领域驱动设计的内容。第23章“软件体系架构”算得上是技术架构的入门读物,主要介绍了分层架构模式与相关设计要素。在第24章“数据访问层”中,我特别引入了.NET 4.0中的Entity Framework,算是一次有益的尝鲜。利用这样的ORM框架,还可以极度方便地实现资源库模式与工作单元模式,在诸多分层架构中,我们都可以看到它们的身影。在第28章“表现层”中,我设想了如何在PetShop中引入ASP.NET MVC框架。我本希望能有大量篇幅介绍Silverlight,以及MVP模式的运用,如此对于.NET的表现层设计方才显得完整。可惜我对Silverlight所知不多,心有余而力不足。
第2版还有诸多变化不能体现在目录中。例如,我对本书的全部设计图进行了更新,更加准确、完善和美观,并保持了图形风格的一致性。第2版加入了诸多注解,大多数内容都是正文的补充与扩展,乃至思想点滴。阅读这些注解,可以帮助读者更好地理解我的设计意图,获得更多的模式知识。
本书面对哪些读者?读者又该如何阅读本书?第1版前言已经给出了答案。本书的再版并不打算彻底改头换面。
本书希望能够持续演进,敬请读者提出宝贵意见,并通过bruce.e.zhang@gmail.com联系我。如需获取本书代码,以及了解后续可能给出的勘误与更新,可以访问我的个人主页http://www.agiledon.com。
非常荣幸能够邀请到西门子中国中央研究院首席架构师李伟先生,InfoQ中文站总编辑霍泰稳先生,微软MVP朱永光先生以及IT168技术频道资深编辑、微软MVP胡铭娅小姐拨冗为我写序。四篇序言各有特色,通过他们的序,可以了解他们的技术心得与心路历程。寥寥千言,或许已胜过我的数十万文字。这样缤纷的文章,无疑为本书增色添彩。
好了,除了致谢,我不打算重复唠叨了。
钱锺书先生认为,献书仿佛魔术家玩的飞刀,放手而并没有脱手。随你怎样把作品奉献给人,作品总是作者自己的。可我还是希望把本书献给我的孩子——子瞻。当他宁静地呆在母亲肚子里时,本书的第2版同样也在孕育之中。现在,子瞻已经过了周岁生日,没有什么礼物可以比得上这本书更加让我感到自豪。我还要把本书献给我亲爱的妻子。写作虽然痛苦,可哪里及得上你分娩痛楚的万分之一。抚养子瞻的辛劳,更让虚弱的你身心憔悴。本书献给你,可否给你一丝安慰?
感谢我的父母。尤其感谢我的母亲。这一年多以来,调皮的子瞻折磨得您腰酸背痛,您却没有任何怨言,反而甘之如饴。我能有时间写作本书,您功不可没。
书一旦出版就不再属于作者。余下的,交给读者去品评吧!
2010年3月

序言回到顶部↑

在InfoQ中文站.NET社区首席编辑朱永光介绍张逸,并希望邀请其加入编辑团队之后,我特别在网上找到张逸的相关资料研读,并粗略翻阅了他的著作《软件设计精要与模式》及译著《WCF服务编程》。一番考察之后,认为其符合InfoQ编辑人员所必备的两个特点:态度认真和技术扎实,然后郑重向其发出邀请。最终,张逸答应了我们的邀请,而我也为能和这样一位优秀的架构师合作而荣幸。通过其在InfoQ中文站上发表的作品,我和永光均为当初的决定欣慰,而张逸的作品也让网站.NET社区的内容更加充实。
很长一段时间以来,与模式相关的话题都特别引人注目。在去年InfoQ中文站举办的QCon北京大会上,来自知名网站eBay的架构师Randy Shoup介绍了eBay架构设计过程中的经验,场面之热烈,让很多参会者现在依然记忆犹新。在今年QCon北京大会上,Jolt图书大奖获得者Michael Nygard会带来他在系统设计过程中的反模式,虽未开场,已有多位朋友表示对此非常期待。诚然,在软件研发过程中,要找到一劳永逸的“银弹”并非易事,但类如“模式”和“反模式”这样的经验总结总会给后来者一些启发。
每个软件系统都有其独特的一面,研发所用的技术或者平台也多有不同,但仔细考察其背后的设计思想,总能发现几丝共性。正是这些共性经过抽象之后,形成模式,然后被后来者不断传承和演进,使得我们的软件系统愈加庞大和健壮。希望通过本书,读者能够了解作者张逸对技术的真诚,也能够帮助自己在软件设计的道路上找到知音和共鸣。
霍泰稳
InfoQ中文站(infoq.com/cn)总编辑

媒体评论回到顶部↑

从实践分享的视角来看,书的内容编写地非常认真。作者从自身工作的经历,分事了自己对软件设计的理解,并以设计原则这样的方式,来分享最宏观层面上的要点。总结、思考的分量,可见一斑。本书有些章节很有新意,注意到了利用自身实践过的设计模式,以真实示例的方式来介绍如何灵活使用各种设计模式。此举对读者的实际工作,颇有帮助,愿为推荐。
西门子中国中央研究院,首席架构师

【插图】

chatu
评论交流

共有4人开贴评论  4人参与评论  1人参与打分 查看

0人
 0%
用户平均打分
我要写评论 help如何参与评论和打分
1人
 100%
0人
 0%
0人
 0%
0人
 0%

oceanyb

专家级评论员
该会员在china-pub购买过此书
评价等级:  
发表于:2010-5-26 14:54:00
内容还可以,排版太稀松了
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

liulun
一级评论员
  
发表于:2010-5-20 12:09:00
封面上的嫩芽被蜗牛吃啦~~~
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

actberw
一级评论员
  
发表于:2010-5-19 16:36:00
张老师的书,顶一下!
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

gllovemz
四级评论员
  
发表于:2010-5-6 10:01:00
封面挺漂亮的,适合架构人员看。
您觉得呢? 送鲜花 (得1支)  扔鸡蛋 (得0个)
我要写评论
查看所有评论交流(共4条)