与王翔面对面——《设计模式——基于C#的工程化实现及扩展》作者访谈录
针对王翔老师的新书《设计模式——基于C#的工程化实现及扩展》的出版,博文视点编辑小林对他进行了邮件专访,现将博文的编辑与王老师的对话整理成文,以飨读者。
王 翔
设计模式是套思想,我是一名从事开发的人员,有时候会觉得如何更巧妙地结合应用功能完成实现须要多多斟酌。
在我的师傅、同事和领导的帮助下,这几年做了一些.NET的项目,我酷爱C#语言,在使用中发现C#实现一些设计模式的时候有很多特色。
虽然本书很多模式的扩展都很有限,但我希望将其作为一个引子,能够与喜欢模式& C#语言的朋友有个讨论的基础,不断完善这部分内容。
从以上写作目的出发,我主要希望该书能够对实际工作有以下帮助:
1. 打破一些固有的套路。
2. 用C#以简洁、直接的手段解决易于变化的问题。
3. 不要仅仅将依赖关系定格在对象体系上,应更多考虑到应用开发、运维不同生命周期中参与者的工作特点,将依赖拓宽到对象、配置体系、数据存储和服务体系。
4. 面向Web、面向混合信息体系、面向服务。
王 翔
同为程序开发人员,我们在对待自己工作的时候总或多或少有些“止于至善”的心结。
我们要借鉴并应用那些成熟的套路,将变化抽象并集中在几个点,然后把它们交给运维人员来处理,而我们把时间更多地放在创造性的工作上。
所以,模式是现成的,但实现套路要靠自己。
如果说开发中我们用什么态度使用模式最重要,我自己的体会有两点:
1. 敏思(不唯套路,同时不囿于局部)。
2. 厉行(如果在适应变化、根据上下文需要应用某些或某个模式的时候,能够用语法支持的特性、FCL完成,则绝不随便构造一整套类型系统,而是直达目的)。
博文小林
王 翔
我是个比较循规蹈矩的人,所以我的建议可能收效会慢点。我认为设计模式虽然是思想,但需要对一个面向对象语言有比较扎实的基础。
以我自己为例。
接触.NET是因为有个项目我师傅觉得用.NET来实现不错,然后我去师傅那里抱佛脚,师傅打开.NET Framework SDK Documentation,指着语言参考的C#部分和Programming with.NET Framework说:“这是你要的”。
不知道是不是有意指点我,记得那段时间他的MSN Personal Message 是“聪明人懂得下笨功夫”。
既然师傅这么安排,那我就一头扎进.NET SDK,7个月后.NET项目延期了,不过我把那些文档全部看完了,C#语言参考还看了两遍,所有的示例代码也都调试过了。
然后看到《设计模式:可复用面向对象软件的基础》,第一遍看的时候,经常觉得“哦,这个太Cool,有收获”,但第二遍看的时候,有很多地方会觉得“这么麻烦,用C#,一下子就OK了”。
所以,设计模式是思想性的东西,但需要在语言上多做些准备,学习的时候要敢于否定自己以前已经很熟悉的套路,甚至是经典中提出的套路,自己给自己一个不断突破的目标,经过批评和自我批评之后再看《设计模式:可复用面向对象软件的基础》,应该就有更多心得和收获了。
至于难点,我师傅也有句话——“重复的力量”,看不清楚就敲击键盘调试它,几遍之后会突然有一个顿悟的时刻。本书概念上最难的是Visitor模式,前面在Observer和Proxy也有个跳跃式的过程,您也可以用“重复的力量”击溃它。
王 翔
我的工作职责主要有三个部分:
1. 作为开发部门的高级技术架构师,主要负责行业业务系统的开发。
2. 作为信息安全工作组的成员,参与公钥项目的实施和扩展。
3. 作为优化小组的成员,参与行业主要业务系统的优化,务求Do more with less。
本书涉及的内容基本上都是从这几年工作经历中抽象、简化出来的,虽然书名有“工程化”,但其实更偏重“工程化实施的功能特性”,因为容错、保密、异常处理、高可用、锁和并发管理基本上没有体现在示例中。
不过本书中也提到了如何透明地加入这些机制,并且还介绍了可以即插即用的模式,希望您不要错过。
我工作的行业是一个快速变化的行业,最近几年每年的增长率都在20%以上,同时又随着全球化、区域化而快速变化。因为业务上的变化要求,技术上必须做出相应的处理,因此发现《设计模式:可复用面向对象软件的基础》后,我就再也没有放弃过它。
这几年行业的标准化程度有了质的跨越,外部环境中Web 2.0、SOA、云计算和纳米计算的概念也在兴起之中,所以书中很多地方提到的XML方式,既是顺应需要,又是不得已为之。希望其中一些粗浅的方法也能用在别的行业中。
王 翔
项目需要,估计别人的项目中也已经越来越多地涉及了这些内容。
完成一个项目,不同类型的模式可能要兼容并包,“尺有所短,寸有所长”。
我有一点体会,不管什么类型的模式,哪怕它叫“架构”,都应该有个“作业面”(借鉴地质、能源行业常用的词),每次经过抽象和简化,不管什么模式其实面对的都是一个相对有限的小场景,头脑中保存的不是按层次分类的模式,而是一个长长的列表,然后根据上下文选择合适的,不要受架构层次一定要用所谓的架构模式、类层次一定要用《设计模式:可复用面向对象软件的基础》中那些对象关系的羁绊,基于组件化、服务化,我们已经可以较容易地拿捏出这个“作业面”。
至于这些扩展部分,准备知识恐怕还是经典的GOF23和相关领域的开发体会。
另外,比较遗憾,没能在本书中把数据访问模式、集成模式、公钥体系中的信息安全模式、XML设计模式和数据库设计模式涵盖进来,如果有幸再版,我希望可以把它们补充进来。
- 可发布的电子样章:点击下载
- 该书所有的示例代码和微软示例数据库的脚本请下载:点击下载
- 博客园预订地址:点击预订
- 博客园《设计模式——基于C#的工程化实现及扩展》专题:http://book.cnblogs.com/zt/DesignPatterns/
更多关注:
关于《设计模式——基于C#的工程化实现与扩展》电子书、示例代码发布,互动网预订开始
围炉取暖话“创业&升职”,请看《走出软件作坊》;
围炉取暖话“求职&面试”,请看《编程之美——微软技术面试心得》