虽在于设计师们是不是操纵了设计之规律。寻找、识别和尝试就是改为我们对技术创新的时光要更之老三部曲。

《软件设计精要和模式》(原名《设计的道》)共分为五篇共28回内容。以下是各篇的篇首语,敬请诸君斧正。

缘起

首先首 设计的若

就此过去几乎年互联网上太充分,而以马上一度让用滥的名词来说,我于2004年变为了一如既往叫博客,用日志的方记录自己成长之更。坦白说,技术的成长远远比身体的生更加地辛苦与徐,尤其是今消息爆炸的年份,我们担忧的匪是吃不满足,而是应当怎么吃,吃呦?营养不良固然令人堪忧,营养过剩却为无是正常的志。如果我们对软件技术做一样糟糕全的扫描,收获地如实是当岔路口的犹疑与不明,就如博尔赫斯笔下的弯路分岔的园。

世世代代不要低估设计之能,特别是那些因为统筹优雅的软件也最高目标的软件设计师们。然而,我们啊无能够高估计设计之威力,以至于每当将软件设计思想供奉在穹顶高悬的佛殿最高处的同时,还要卑躬屈膝地对准她到礼膜拜。归根结底,软件设计不过是软件开发进程遭到千篇一律圈不可或缺的链条而已。就是这样,我们毋需为她蒙上黑之面纱,毋需为他戴上皇帝的头盔。

这是平种梦魇,就如于自身的娃子时期,每次发高烧都见面召开的跟一个梦魇一样,跑不丢,挣不脱,惊醒后也还要说不清的感觉到。没人愿意走迷宫,除了那些因打消谜题为意之天分们。所以,我们当软件设计的迷宫门前停住了脚步;然后,四处张望寻找通过迷宫的地形图。

踌躇满志的统筹是一模一样派别艺术,可用之设计则是千篇一律门户是,软件设计更是如此。那么,设计是否生业内为?我想起赫拉克福利就的相同词话:“人未能够简单坏走上前同长长的河”,这表示一栽涉是不足再的。然而,软件设计却与那奔腾不息的河水不同,其中饱含的深仍时有发生规律但循。那么,设计之高下的分,就在于设计师们是不是操纵了设计之原理,或者说咱俩需要分辨哪些因素方才是软件设计之如?

非掌握世界上是否真正在过软件设计迷宫的地形图,但至少有人已经通过,并且留下了冰冷的足迹。这些足迹或者相重叠,或者复杂冗杂,分不穷哪里才是走过的正确性的路。于是,寻找、识别以及尝试就是成为我们对技术更新的时如果更之老三部曲。

而,谁又敢说好了掌握了拥有的计划性的要吗?面向对象的计划思想、设计模式、重构、测试驱动开发、极限编程……设计的志是上的,我们能够打出来的统筹的要又何尝不是冰山的角也?

藏的技能,特别是经的统筹思想,完全好无去这几只步骤。例如设计模式,在面向对象世界里,它早已改为了经的在,我们无需浪费时间去质疑它的显要。省去了追寻、识别与尝试的历程,我们好直接拿其设定也急需攻克之桥头堡。正是冲这样的对象,我开始尝试同普遍博友分享我之战斗攻略同体会。

仲首 .NET Framework与设计模式

博客的作风是“童言无忌”,所以自己能够随意写意地耕耘博客园的同一块田地。俗语说:种瓜得瓜,种豆得豆。我种植下了技能之种子,吸收着评论的养料,最后得的可是当今即刻本呈现于读者面前的《软件设计精要与模式》,连我好也要是觉得莫名惊诧了。书的问世缘起偶然。在本人举行截止了一个抬高齐一年多底档次然后,又在场了另外一个大型项目最后阶段的支付和测试,最后拒绝了一个周期可能抬高及几年的品类布局,结束了以京的流离失所回到家乡。我开始了悠闲自得的放假生涯。一不成偶然和博客园站长杜勇先生的扯淡,结束了自己之休假状态,开始了累累月的描摹书生涯。对于杜勇先生,我怀念将谢的言辞在本文的结尾,此时只是想发挥我之“愤慨”,是你,谋杀了我之恬淡生活:)

从.NET
Framework挖掘设计模式的范例,对于设计模式的执行具有重大的意义。一直以来,设计模式虽然受很多学者和开发者推崇,然而,一味地展开申辩的介绍,会教设计模式的以流于空泛。大多数介绍设计模式的文章,并不乏实际例子的支撑,但笔者以还通俗易懂的验证设计模式的宗旨和花,往往采取了非常简单且未享有实际项目意义的实例进行阐述。这些事例,用于初学固然效果是,但要求开发者能够熟练地将设计模式运用到路被,常常会有无从下手的发。

哼于自家当下仍开成为不了导人们走有迷宫的地图,所以我好“没有责任心”地回过头来欣赏好在迷宫墙上的写道,即使是一个总人口之法门,对于好而言,也是相同种美。萨特说:“存在就合理”,我信任本书能反映这种逻辑的客体。

.NET
Framework对设计模式的用的又有说服力。既然在这样重量级的框架产品中,设计模式展示了她不管与伦比的雅与精,正可以潇洒地说明设计模式在软件开发中之要地位。从这些充满了计划美感的代码作品受到,吸取养料,并经证明自己对设计模式的知晓,无疑是同一种植愉快的感受。仿佛读了同据好书,看了同样总理漂亮的影片,欣赏了同一摆精彩的音乐会,是平等种灵魂之畅快淋漓。

本书有几什么

暨设计师的心灵对话,就打当时同一段段精彩之代码开始……

既是本书的内容源自于博客的情,就必将继承了一部分松松垮垮自由之作风。我还建议读者将书被各章看作是一篇篇技术随笔,因为自身实际厌倦了那种捧在高文大册时之怕了。于是,我尽力以营造一栽华丽的风骨,以这个来打那些习惯了干燥与诚实的读者口味。

其三首 媒体播放器的计划的一起

散文的宗是“形散而神不散”,本书基本可散文的旺盛。虽然各一样章还得当是一个独的有的,然而其中带有的思辨也是千篇一律的,因而又可以共同为一个完全。如果观察整的片段,我们又得拿该隔离开来,成为一个单身在的比比皆是。如此安排,固然与博客的风骨有关,却能够兼顾得一个补,就是读者可发取舍的因本人状态展开阅读,而无需囿于整部修的约。

媒体播放器并无是一个巨兽一般大的型,但在计划达到倒是也杀费周章。任何类型还不是轻易之,在经验媒体播放器的筹划的一起时,我们就是如一个冲向魔兽世界之猎人,面对软件设计中僵化的有,张开弓弩来寻求解决之道。

全书围绕着软件设计的核心内容,结合大气底实例与代码,使该告别了纯理论研讨之肤浅,将软件设计理论及项目推行到地整合起来。遵循这样的尺度,是因咱们以筹划具体的软件,而无是在乌托邦中空想。软件开发,根本就是没有乌托邦的世外桃源。

需转变是计划之敌人,僵硬的设计却是软件开发过程被的“第五纵队”,如果未加以珍惜,就会生分崩离析的险恶。因此,在计划媒体播放器的过程被,我们直接当与品类组织的僵化问题发着不便的作战。面对不同的需要状况,我们尝试了十八般武艺,引入了面向对象设计思想,引入了设计模式中之Factory
Method模式、Adapter模式、Decorator模式和Visitor模式。显然,我们下这些家伙还称得及游刃有余自如,发挥了足的威力。设计之同充满了铤而走险,但就僵化的题材解决,我们虽还当途中,距离成功倒已经休多矣。

依据发表内容的不等,全书以逐步进可不曾进阶的样式分成了五非常文章。第一篇为“设计之而”,相当于是本书的纲要,列举了软件设计的要素,包括设计模式、重构、测试驱动开发、极限编程等。从涵盖面来拘禁,“设计的若”一首包容了软件设计中不过关键的“流行元素”,它们是程序员向设计师“涅磐”的内核,是从小工到专家的修炼法门。受篇幅所限,我当论述这些根本之设计元素时,只能是浅尝辄止,颇有几乎分了犹未老之觉得。然而,我连无期团结之阐发浮于表面,而是欲能够结合现实的实例,深入浅出的辨析其的庐山真面目与精神。我希望读者在读书了这些章下,有同种饥饿的觉得,不停止地询问与质疑,然后再度“上穷碧落下黄泉”地失去摸有关的材料,以告获得更入木三分之领悟。

季首 设计模式应用实践

在次篇“.NET Framework及设计模式”中,我偷闲地从.NET
Framework的共处设计着检索到有关设计模式的尽,包括Factory
Method模式、Composite模式、Decorator模式、Iterator模式及Strategy模式。为了拉读者更好地知道这些模式,在各国一样节中,我都运了“抛砖引玉”的道,首先分析相关模式的原形,并组成现实实例详解模式之目的及用场景。最后,.NET
Framework粉墨登场,尽露温馨主角的魅力。由于.NET
Framework是一个大幅度之框架,包含的代码浩如烟海,不容许在短短的一回中到底尽其翔的筹划。因而,我当引入.NET
Framework实例时,力求言简意赅,删去了和文章主旨无关之代码,并辅以UML图体现统筹思想。对于.NET
Framework在落实相关模式时独具匠心的另一方面,我则着力地被给详尽的牵线,力求深入透彻。

而今,我们是早晚打实验室中倒出来了。并非有激动人心的物都是由实验室中创造出来的。如果莱特兄弟没有经历数百坏的试飞,人类的率先劫持飞机也就无法以晴空中随机飞翔。通过采用实践取得的更,远较静坐于实验室中的冥思苦想来得重真实与刻骨铭心。实践的值肯定远远超实践本身的含义。

.NET
Framework是均等鸣主食大餐,虽然美味爽口,却非休有几分油腻。所以自己当第三首被以上了同一志清炒时蔬,希望能抑制一制止油荤。“媒体播放器的宏图之同”一首,引入了一个造的媒体播放器项目。之所以称之为“设计之同”,是盖媒体播放器的最后到,确实是平段艰难的道,设置重重路障的凡吧咱提供需求的客户。本篇的独有的处是各章既相互独立,又有藕断丝连的联络。虽然是种执行,但无疑又牵动了几分开对相关设计模式探讨和研究的意味。本篇论述的设计模式包括Factory
Method模式、Adapter模式、Decorator模式及Visitor模式。

三百差不多年前,一个苹果掉在牛顿的头上,于是伟大的万出引力定律产生了。人们似乎总是好奇于这种神奇的魔力,却忽视了牛顿在思考万有引力的当儿,曾经做了之断然潮演算和推理。正而老神奇之苹果掉在咱们头上,诞生不了万起引力定律;我们无能够博取出幸运的臆想,希望奇迹地灵机一动,就会自如地操纵设计模式。

唯恐第四篇“设计模式应用实践”最能体现本书的价值。它仍然是设计模式项目推行的累,凸现其价值的因由在于这些品种执行,均是自己亲与规划和开支的路。无疑,它们的兑现再次享有实际的指导意义。我常常在思念,究竟是啊阻碍了程序员对设计模式的接头?他们的广泛意见是匪患设计模式之艰深难懂,而致病设计模式运用的艰辛。怎么将设计模式运用到骨子里的类型支付被,是他们对的极度深题目。所谓“读书百全方位,其义自现”,我眷恋,唯一的解决之道就是实施,实践,再实践。西方有谚语说“Practice
make
perfect”,翻译啊中文即是“熟能生巧”。然而,盲目的履行终归是未化的,我们得往她们出示一些既实现了底示范。在对设计模式进行教学时,我们虽需要示例的精工细作、生动与影像,但顶根本的特质还是如和事实上的开销做,否则,再合适的言传身教都见面成为“空中楼阁”。如果就追求比喻的“一鸣惊人”,或许能强化程序员对设计模式的知晓,但对哪些在类型开被其实应用其,仍然是平片茫然。本篇论述的设计模式包括Abstract
Factory模式、Builder模式、Command模式、Chain Of
Responsibility模式、Observer模式、Proxy模式、Strategy模式、Template
Method模式及Bridge模式。

设计模式是砥砺的结果,是面向对象设计思想之集大成者。要掌握它,必须经历项目实行的锤打。这个历程未肯定喜欢,甚至是一致种植磨砺,但可拥有魅力,是惊天动地的价所在。“无限风光在山顶”,但哪个而能够说,攀登山峰的沿途景点就无壮观与美吧?

第五首“.NET体系架构设计”不再围绕设计模式,而是为还胜似地层次来讲述体系架构设计的很多模式以及标准。有关架构设计的分析最易流于肤浅,而本篇则坐PetShop电子商务系统作为系统架构分析的演示,使得内容会采纳本书一直坚持的类实行则。囿于自身所认识,本篇无法对系架构设计的漫天作出全局的讲述,主要介绍了细分层式架构设计思想,并阐述了相关模式的使用。其中,论述的设计模式包括Abstract
Factory模式、Strategy模式、Facade模式、Proxy模式;企业应用架构模式遭遇之Data
Mapper模式、Domain Model模式、Page Controller模式以及MVC模式。

第五首 .NET体系架构设计

本书面对的读者
本书并非同一遵照软件设计的入门指导,对于程序设计的新家,本书的内容未休艰深了来。虽然自己直接力求讲解浅显明白,试图以极其简单易行的说话和最鲜明的逻辑阐述设计思想,并佐以丰富的实例展现设计之切实可行一面;然而,内容之自特质决定了它不容许变成“从入门到精通”的大百科式全书。

欠理想的宏图,软件开发就见面沦为混乱。开发人员就如那抓匪停止线球的猫儿一般,扑来扑去,线球始终未以掌握之中,越滚越远,越滚越滥。细节之统筹决定我们能否理清线团的纠缠方式,但真正主宰我们是否将一切线团完全掌控在股掌之中的,是路之网架构设计。

对同誉为即将迈入软件设计门槛,或者发生举世瞩目要求希望增长我设计能力的程序员而言,本书或许能满足你的这种诉求。假定你都具有了肯定之面向对象设计思想,且具备设计模式的基本知识,那么本书就是不会见拒绝而于本里以外了。如果您已成了平等称作合格的软件设计师,那么本书能带动被您的价值,更多的凡参照和借鉴之含义。向优质的软件设计师进发,是相同漫长荆棘之路,本书或许会磨利你的刀刃,助你敢。

相对于设计模式而言,体系架构设计无疑是又胜层次之计划意见。它几乎涵盖了软件开发领域的所有,这便要求架构师必须掌控全局,否则就算会深陷收之桑榆,却还要失之东隅的泥坑。

王国维以《人间词话》一题被写到:古今之变成雅事业大学问者,必经过三种植程度。“昨夜大风凋碧树,独上高楼,望尽天涯路。”此第一地步也。“衣带渐宽终不悔,为伊消得人憔悴。”此第二程度也。“众里寻他千百过,蓦然回首,那人却在灯火阑珊处。”此第三境界为。当你正在“独上高楼,望尽天涯路”的当儿,本书或许能帮忙您迈出入“衣带渐宽终不悔”的境界。

一经成才也同样名叫优秀的架构设计师,绝非一朝一夕之功。最重大之路是大度之型实行,此外就是是上及参考优秀之计划范例。作为Microsoft展示.NET技术于铺子系统出方力量的示范项目,PetShop的系统架构设计无疑值得咱们念。或许,我们对PetShop的审视和解剖,不过大凡一律栽管窥蠡测;但它至少教会我们懂得一种办法,就是要我们不去带动那到底混乱的源之线头,那么任何线团终究会被我们掌握在手中。

本书的言传身教代码都归因于C#完了。然而本书并非程序语言的教学书,它关注的基本是软件设计思想,因此,略去语法本身所带来的难受,对于.NET平台下之另语言编程人员,依然有着自然价值。本书关注于.NET平台技术,但并无排斥Java世界。实际上,除去.NET独有的技术和运行条件,两者之间在软件设计思想齐并无呀不同。

读书前之预备
本书提供了大气之以身作则。为了重新好地懂得本书,阅读代码并运行这些实例是很必要的。因此,你要未雨绸缪好是的软件条件。首先是.NET
Framework 2.0,以及Visual Studio
2005。由于有些示例采用了测试驱动开发的模式,引入了单元测试代码,所以你需要下载并安装NUnit
2.0,下载地址是http://www.nunit.org/。

本书第五篇以PetShop
4.0当作系统架构设计的剖析案例,因此,你有必不可少装PetShop
4.0版,下载地址为http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet4.asp。此外,你还索要安装SQL
Server或者Oracle,因为PetShop需要拜访数据库。实际上,数据库的筹划为是软件体系架构设计中的重要一环。

哪些阅读本书

你可以顺序地翻阅本书,虽然“设计的若”一篇涵盖的情节恐怕会见制作一些读上的困顿,但它们好帮忙您建软件设计的骨干考虑和规范。然而,鉴于书中各章近似于“松散耦合”的干,你为堪因阅读兴趣挑有关的区块。事实上,本书并无强迫性的读定式,你甚至足以像看博客文章或技术随笔那样,带在轻松的心绪浏览全书。

一经您仅仅对设计模式感兴趣,那么自己希望而首先看第2章,它会报告你设计模式最核心的合计——“封装变化”。几乎可这样说,全书中有关设计模式的章,都是环绕在“封装变化”的沉思来阐述与贯彻的。

倘您针对面向对象设计思想还起微疑,我提议乃首先看第11章,然后,跟随着媒体播放器的计划之同,到达你指望的筹划目标。如果您受困于设计模式的种用,那么直接阅读第二首与第四篇,会是一个不错的选取。如果您只是想深入了解有平栽设计模式,那么就算看看目录吧,然后因章节名直奔主题,或许可以呢卿节省宝贵的时日。

至于重构、测试驱动开发暨终极编程,你可以在率先首被找到相应之区块。但若是期望到的摸底其,那么还是丢本书吧,它并无是你确实想如果的。但要您肯认真地读书第1段,或许它好啊公有地缓解有关软件设计的迷惑。

若你指望了解体系架构设计方面的始末,毋庸置疑,第五首才是您需要关爱之情节。但万一你要扎实地运动好软件设计之路,千万不要好高骛远,还是从第1段开读吧。

致谢
除外被致谢的口外,这同样节约内容往往给读者忽略,以至于漠视了具备支持自己、帮助我之亲属和意中人。所以,我欲将即刻无异于有些更换得重复起价有。为了不坐离本书的骨干精神,我引入计划之极来论述。
谢谢的道来成百上千种植,例如口头致谢,为对方献上鲜花或者给礼金,这一定给平种植致谢策略。从软件设计的角度来拘禁,我们好定义如下接口:
public interface IAcknowledge
{
 void Acknowledge();
}

如假定实现口头致谢,可以定义如下的近乎,并促成IAcknowledge接口:
public class Appreciation:IAcknowledge
{
 public void Acknowledge()
 {
  Console.WriteLine(“Thank you!”);
 }
}

献花与给礼物的兑现则如下所示:
public class PresentFlowers:IAcknowledge
{
public void Acknowledge()
 {
  Console.WriteLine(“To present flowers.”);
 }
}
public class Reward:IAcknowledge
{
public void Acknowledge()
 {
  Console.WriteLine(“Reward payment.”);
 }
}

如上是一流的Strategy模式的贯彻,我们好当文书文件中列有待感谢的人数,并被起致谢方式所对应之次第集名与具体类名。在读取了文件文件中之各一样实施价后,利用反射技术创造实现了IAcknowledge接口的具体类对象,然后调用Acknowledge方法,向对方致以我无限真诚的谢忱。

然,致谢并不仅是单的有同种方法,我恐怕要朝着内口头表示感谢的以,献上平等约束新采集的鲜花。此时,Decorator模式就是可以打发上大用场。如何兑现吗?我们得以在看了第8节跟第13节后,再回过头来思考是命题。

为此生之例证来阐释软件设计的原理,是吕震宇先生于与自身的诱导。他的设计模式随笔系列向本人出示了另外一栽叙述的魅力。在自家做本书里,每当自己的规划思路出现了纠缠不清的迷惑,我会尝试去阅读他的章,希望能收获有启示。我不能不感谢徐宁(idior)先生,他对此问题之追究总有同等种类似于偏执的狂热,在同外的座谈着,我受益良多。卿子成秀才曾也本书提供了片门类实例,虽然最后因为种种原因没有能够引入,使得本书失色不少,但他吃与的帮带要自身一直心怀感激。

尽无能够忽视的一个要人物是杜勇先生。可以说,没有杜勇先生,这按照开根本不怕不曾机会能起。最要害的凡,在博客园完婚的就几年岁月,使自身出空子结识更多在技术上志同道合的爱人。博客园推动了自己技术的成长,作为博客园站长的杜勇先生居功至伟。感谢你让本人跟数万博客园居民带来的免费之优质服务。

不能不感谢博客园出写团队成员,李会军(Terry Lee),徐宁(idior),Dflying
Chen,Allen
Lee,……你们的热心让了自我大的鼓舞。还要谢双鱼座,你对本书的书名提出了深刻的见解。感谢Anders
小明,使自身确定了本书的书名。特别感谢许多直关心本书进行的网友们,你们的赞我愧不敢当,你们的批评本身虚心接受。

一如既往本书的问世,绝不止是作者付出劳动的辛苦就能兑现之,幕后工作者的名不应给埋没。感谢博文视点的编排和审阅者,他(她)们包:
责任编辑胡辛征先生
修葛娜女士
(注:大部分修名字现在不解,此处有些)

本身思借这空子谢谢自己的眷属。父母生我留自己,他们之恩典我哪怕是衔草结环也难以回报。对于本书,他们倾注了大量的血汗,保障了我的后勤。特别是尚未大人每天的催促,本书不容许如期杀青。感谢我新婚之老伴,在自身无暇于写书之时节,总是忽略了卿私自在本人身边。即使是以阳光明媚的秋日,我也无力回天陪伴你失去南山野营。但您没有丝毫闲话,反而不时在自家夜深写稿的上,悄悄地为自身端上一致杯温暖的茶水。家人之眷顾始终是这么温暖,我希望能够拿本书献给自己亲如手足的亲属!

相关文章