Live a simple life

沉默(zhu_xing@live.cn)
随笔 - 48, 文章 - 0, 评论 - 132, 引用 - 0
数据加载中……

设计模式杂谈

        原来不经常逛技术论坛,最近闲着看的比较多一点,看到了相当的内容是在讨论设计模式的东西。今天,也闲侃一下

        1、设计模式的角色是什么?  工具而已,而且不是一个很高级的工具,更不是一个全能的工具。什么时候决定使用设计模式呢,有需求,是你决定好了要干什么,接着才考虑怎么去实现它,让设计模式帮你去实现!!!举个例子,例如你要做的系统中的某个模块,基于的数据来自于xml文件,思考之后,你需要基于xml文件去建立你的业务模型对象。那怎么合理的来封装这种实现呢? 这个时候,你可能自然地去选择用Composite模块去封装这种树状类型体系。 那你接着会看到,这个树形对象的构造挺繁琐的,你不希望用户去完成这些工作,那么你可能会想到去封装这种实例化过程,各种创建型模式选择之后,你可能选择了工厂模式。  数据有了,你可能接下来去实现核心的业务行为了,相当多的业务行为是基于前面你封装的树性对象结构之上。 你写的行为多了之后,你可能觉得数据结构本身和这么多行为沾粘在了一起,你可能想,干脆将它们分开算了(虽然这样有点打破封装),怎么很好的分开呢? 这个时候你可能自然的去用了vistor模式...

        2、如何去大致评估设计模式是否被正确使用了呢?  个人的经验是从需求、设计原则、设计模式本身两个层面来判断。所谓需求来判断,就是你使用这个设计模式是否在解决实际需求,是否是为了设计模式而设计模式。例如你可能用某个模式是为了以后更容易扩展,那么你看了,你的这种需求是真的存在的吗?哪怕真的存在,需求有那么大吗?  所谓的基于设计原则判断,则是从技术角度在宏观上做个评审~_~。例如直觉告诉你抽象层面的东西和实现层面的东西耦合在一块了,例如你设计了一个狂大的接口等等...   设计模式的不恰当使用,会使得代码变得更加不优雅,也会增加很多不必要的复杂度。  所谓从设计模式本身来判断,则是以技术视角去审核一下你用这个模式的场景和模式本身使用的创建是否有差异,基本上每个模式的使用都会引来一些对应的副作用,那么你要看一下这种副作用恰恰是你所不能接受的...

        3、如果你是单纯的在设计阶段,设计模式能帮助你什么呢?  个人经验,无论是处在那个设计阶段,对设计模式有较好的理解会有助你设计的时候思考问题,甚至更好的帮助你将业务需求转换为技术需求,并合理的处理这些技术需求,进一步转为具体的设计方案。但是要注意是有助于,绝对不是基于设计模式。  例如做概要设计的时候,精力还是集中在模块划分、模块提供的主要服务、模块之间的交互方式等。  进行详细设计的时候,设计模式扮演的角色才会稍微更重一点。设计阶段满脑子设计模式,你可能会有两个下场:一是过度设计,而是错误设计。   

        4、设计模式和重构?  设计模式基本上可以理解为是一个代码级别的设计工具,同时也是重构时候的较为高级的手段。具体的,建议有时间可以看一下《重构与模式》,可能会有点体会。重构在一定程度上可以修正设计不足(个人觉得仅仅是一定程度),也能修理掉过度设计。

        5、设计模式在学习过程中处于什么阶段?  个人觉得基本上是如下路线:基础知识、具体开发语言、语言层面技巧、设计模式、设计原则....(俺就是一个写代码的,再往下实在是不会了,更高层次的方法论没有接触过^_^)   学习的手段可以分为:经典书籍、实践经验、高手教诲等等。 国内作者写的书有时间可以撒两眼(不是说高手少,而是高手一般可能不会去写书,丢不起那人^_^),没时间就算了,要读就读经典。  实践经验是无论如何无法取代的,保证认真地态度去写代码,写的时候瞎想想,见到好的代码模仿模仿。   高手教诲就不用说了,如果你的团队中有经验老练的高手,那你非常幸运,成天不耻下问吧。  基础不扎实,会导致典型的就设计模式而设计模式,这种人论坛上还很多的。  没接触设计模式的时候,你感觉写代码很流利;接触一些后,你肯定会觉得自己满脑子设计模式,不会写代码了,写的时候老想着是否该用这个模式或者该用那个模式...;再过一段时间,基于设计模式的使用经验和理解增多,你有会比较流利,你会有点自豪,觉得你是和大部分在不同层面上写代码;  再过一段时间,你可能会接触一些设计原则的东西,你有麻烦了,又觉得肯能不怎么会写代码了,因为你脑子里想着很多松耦合、基于接口、开闭等等东西,老怀疑你设计模式用的对吗,要不干脆不用了....;  再过一段时间,应该会恢复了,你可能又会有点自豪了,你会觉得你用模式是在设计原则指导之下使用的,而且这个时候你会觉得设计模式可以用的很活,多个模式之间的配合等等也是很自然的事情,因为这个时候你脑子想的更多的是设计模式对应的场景和副作用等等,而不是之前满脑子设计模式相关的实现细节了

        6、设计模式真的能成为写代码的人之间的交流语言?   如果能这样,你可能在一个素质很高的团队,羡慕你,实在是羡慕你!!!    一般别抱这种幻想,也别去强迫其他人使用设计模式,否则你可能会挨骂^_^。我的感觉是与其让我遇到一个连设计模式都没有听说过的人,也不希望遇到一个满口设计模式去不会真正用设计模式的人,那是很折磨人的^_^


        7、。。。。

        8、。。。。

本博客中的所有文章、随笔除了标题中含有引用或者转载字样的,其他均为原创。转载请注明出处,谢谢!

posted on 2008-09-08 11:55 zhuxing 阅读(1991) 评论(3)  编辑  收藏 所属分类: 设计杂谈

评论

# re: 设计模式杂谈  回复  更多评论   

刚写这篇闲侃,比平时吃饭晚了10分钟。 该吃过饭去小超时买烟,眼看着最后一包红双喜被另外一个哥们买去了,剩下的只有中华和几种很烂的烟了。 思考再三,拿了包烂的
2008-09-08 12:37 | zhuxing

# re: 设计模式杂谈  回复  更多评论   

模式的使用时需要经验的积累的,看看书无济于事
2008-09-08 12:52 | Jack.Wang

# re: 设计模式杂谈  回复  更多评论   

@Jack.Wang
看书(当然要是好书)和经验缺一不可,看书有助于更好、更快的积累有价值的经验,最后写代码的时候,发挥作用的肯定是经验。

想靠自己的实践积累出来一些经典书上面的结论,显然有点高估自己了^_^ 但是实践积累肯定能够更好地理解书本内容,感觉有点不一样了哈
2008-09-08 17:20 | zhuxing

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问