就他吧-9ta8为您提供:身份证查询、15位转16位身份证,手机号码归属地查询,IP地址查询服务,城市天气预报查询,列车时刻表简易快速查询等等查询服务,就他吧欢迎您的光临!!
随笔-93  评论-635  文章-7  trackbacks-98

        设计模式是面向对象编程的热门话题之一,越来越多的开发人员认识到设计模式的重要性。采用各种语言实现设计模式的文章也越来越多,但是很多开发人员发现很难将设计模式与实际开发中需要解决的具体问题相联系。因为使用设计模式的难点往往不在于模式的实现,而在于很难确定哪种模式可以在现实的应用场景中采用,从而导致了在现实的项目中,面对客户的压力,我们总是采用最直截了当的方法解决问题,来不及多考虑这些方法的优劣,即使明知将带来更大的麻烦也必须如此。有些时候因为选择了不恰当的设计模式,使原本简单的问题变得复杂化。

        总是有些优秀的设计人员可以在同样短的时间内做出正确对待的判断,他们同样是依靠本能和直觉,只是这种本能是在日常编程开发中一点一滴积累起来的。如同一个剑客在危机时刻的一击,并不是一时的灵光乍现,而是平时刻苦修炼的结果。

        俗话说,紧靠背棋谱成不了围棋高手。只在概念上理解设计模式而不实现,同样成不了架构设计师。在软件设计时,要有意识地问自己使用还是不使用设计模式,不要匆忙下结论。重视软件质量的改进,如果有可能,则在项目后期重构代码。同时注意学习同行的经验,很多开放源码项目是值得学习的。

(1)正确理解设计模式
        模式所关注的不仅是重复的解决方案,更主要的是关注重复出现的应用场景和与场景相关的各种作用力。很多使用设计模式失败的原因,并不是实现设计模式的方法有问题,而是采用的设计模式不适合应用场景。这往往导致设计过度,使软件应得复杂,进而丧失对使用设计模式的信心。

(2)编程语言与设计模式的实现
         尽管设计模式本身并不要求一定用某种语言来实现,但脱离了具体的实现,就无法真正理解设计模式。GOF的《设计模式》是经典之作,但毕竟距现在已经十几年了。这个期间开发平台已经进化了多代,很多新技术已经应用到编程中。有些技术可以简化设计模式的实现,有些技术已经采用了设计模式。因此,学习设计模式必须针对所使用的编程语言和开发平台。一定要注意,不是将《设计模式》中的例子转换为C#或者其他语言就等于知道如何实现设计模式了,而是要关注设计模式的精髓,并结合具体的语言特点完成其实现。就.NET而言,很多技术可以简化设计模式的实现,例如采用反射技术实现工厂和采用委托技术实现模板方法等。

(3)需求驱动
        需求驱动不仅仅是功能性需求,还包括性能需求及运行时的需求,如软件的可维护性和可复用性等方面。
        设计模式是针对软件设计的,而软件设计是针对需求的,一定不要为了使用模式而使用模式。在不合适的场合生搬硬套地使用模式反而会使设计应得复杂,使软件难以调试和维护。
   
(4)分析成功的模式应用项目
        对现有的应用实例进行分析是学习模式的一个很好的途径,应当注意学习已有的项目不仅是学习设计模式如何实现,更重要的是注意在什么场合使用设计模式。
        “置之死地而后生”可以说是一种解决方案,而不是模式,或者说仅仅给出了模式的实现,而没有交代使用的场合。项羽采用这个方案把秦军打败了,但马谡却丢了街亭。

(5)充分了解所使用的开发平台。
        总的来说,设计模式是针对面向对象的软件设计的,因此在理论上适合任何面向对象的语言。但随着技术的发展和编程环境的改善,设计模式的实现方式会有很大的差别。在某些平台下,某些设计模式是自然实现的,某些模式已经被平台所实现,某些模式存在的上下文已经消失。
        这里的平台不仅指编程语言,还包括平台引入的技术。.NET平台引进了反射、委托,以及属性等新技术,这些技术的使用使设计模式的实现方式有了很大的改变。例如,工厂方法通过采用反射技术,可以将其中的子类去掉。这实际上已经是一个.NET下的新模式,或者说是.NET的“方言”。

(6)在编程中领悟模式
        软件开发是一项实践工作,最直接的方法就是编程。没有定式很熟却从来不下棋的围棋高手,也没有不会编程就成为架构设计师的先例。对设计模式的掌握是水到渠成的事情,你可能是“顿悟”,也可能是“渐悟”,但前提是必须有相当的实践积累。当然,并不是不需要看书学习,但实践仍然是必须首先要重视的。
        认为编程如同写文章,提高需要有一个过程。在多多编程的同时,需要有一定的技巧。如果希望水平有较大提高,则需要对自己编写的代码不断重构。力求最优是个很好的习惯,当然前提是项目进度允许。即使项目时间紧张,也需要进行适当的总结。隔一段时间检查一下以前的工作,会发现自己是否已经有了提高。

(7)避免设计过度
        设计模式解决的是设计不足的问题,但同时也要避免设计过度。一定要牢记简洁原则(Keep It Simple, Stupid, KISS),要知道,设计模式是为了使设计简单,而不是更复杂。如果引入设计模式使设计变得复杂,只能说我们把简单的问题复杂化了,问题本身不需要设计模式。
        这里需要把握的是需求变化的程度,一定要区分需求的稳定篇和可变篇。一个软件必然有稳定的篇,这个篇就是核心业务逻辑。如果核心业务逻辑发生变化,软件就没有存在的必要,这个篇的逻辑是我们需要固化的。对于可变的篇,需要判断可能发生变化的程度来确定设计策略和设计风险。要知道,设计过度与设计不足同样对项目有害。

(8)合理看待设计模式的实现实例
        现在,从各种途径可以发现各种设计模式的实现实例。需要说明的是,其中很多实例所说明的仅仅是设计模式的解决方案的实现,并没有分析模式使用的上下文。实际上,这也是最困难的篇——从而导致实例中的设计模式使用从实践的角度看,往往是过度设计,也就是有小题大做的嫌疑。

        对模式感兴趣的朋友可以从下面的几个开源项目中学习模式的成功应用。以后可能会把模式在下面几个开源代码中的应用的文章与大家共享。
                            NUnit:.net:单元测试平台,采用c#编写
                            DotNetNoke:vb.net写的Portal Web
                            Gentle:对象持久化工具,采用C#
                            Log4net:日志记录工具,采用C#

posted on 2005-08-10 13:41 振河 阅读(3180) 评论(54)  编辑 收藏 所属分类: .Net设计模式

评论:
#1楼  2005-08-10 15:42 | 都城浪子      
studying.......
  回复  引用  查看    
#2楼  2005-08-10 18:06 | scong [未注册用户]
期待楼主的后文
  回复  引用    
#3楼  2005-08-10 18:12 | 振河      
不会让朋友们失望的,呵呵

  回复  引用  查看    
#4楼  2005-08-10 20:26 | 天寒      
赞楼主..
  回复  引用  查看    
#5楼  2005-08-11 09:41 | 怀沙      
好文!
  回复  引用  查看    
#6楼  2005-08-11 23:04 | 18:30 [未注册用户]
写的太好了,
  回复  引用    
#7楼  2005-08-12 08:54 | 振河      
大家有没有在上边提到的那几个开源代码的源代码,如果没有的话在此给我留言了,我会给你的
  回复  引用  查看    
#8楼  2005-08-12 11:06 | 天寒      
我要一份,振河,谢谢
dayfrom@gmail.com,你要是用163的发到dayfrom@126.com,Thanks again
  回复  引用  查看    
#9楼 [楼主] 2005-08-12 13:18 | 振河      
给你发到dayfrom@126.com了,天寒
  回复  引用  查看    
#10楼  2005-08-12 18:29 | mingzaili [未注册用户]
给我发一个吧,谢谢振河!!

mingzaili@126.com
  回复  引用    
#11楼 [楼主] 2005-08-13 13:53 | 振河      
@mingzaili,请查收邮件
  回复  引用  查看    
#12楼  2005-08-17 09:38 | 此人已疯      
正在学习,但不知道设计模式如何运用到工程中,给我一份吧,谢谢
licaiqun163@163.com
  回复  引用  查看    
#13楼  2005-08-17 10:51 | 振河      
@此人已疯
请查收邮件
  回复  引用  查看    
#14楼  2005-08-18 09:17 | sunsl [未注册用户]
我急需一份 sunsl_yantai@163.com 谢谢
  回复  引用    
#15楼 [楼主] 2005-08-18 10:49 | 振河      
@sunsl
请查收邮件
  回复  引用  查看    
#16楼  2005-08-18 17:31 | 蜡人张      
振河,给我也发一份吧,谢谢!xzwaxdoll@163.com
  回复  引用  查看    
#17楼 [楼主] 2005-08-18 17:49 | 振河      
@蜡人张
请查收邮件
  回复  引用  查看    
#18楼  2005-08-23 17:51 | 你们这帮做技术的 [未注册用户]
匹用,都是教条主义,你们只知道钻研技术,谁也不会成功。
  回复  引用    
#19楼  2005-08-24 10:54 | Silva      
hi, 振河
Could you send me one too?
Thanks in advance!
  回复  引用  查看    
#20楼  2005-08-24 12:38 | 振河      
@Silva
你的邮件地址呢?
  回复  引用  查看    
#21楼  2005-09-05 11:19 | 齐国老兵      
htia@vip.sina.com
thanks!!!
dnn就不要了,已经有了,要其他三个
  回复  引用  查看    
#22楼  2005-09-05 12:43 | 振河      
@齐国老兵
查收邮件
  回复  引用  查看    
#23楼  2005-09-21 15:07 | xiaoping20022008@163.com [未注册用户]
斑竹给我发一下上面的那四个DEMO.我要.我现在看DUWAMISH,PETSHOP是越看越郁闷.同事的代码也我的不一样.能给我发一下吗?有看到我帖子的朋友,如果你已经得到也请给我发一下.谢谢.xiaoping20022008@163.com
  回复  引用    
#24楼  2005-09-27 14:40 | XXL      
Great!!
Email:XiongXL@huaweisoft.com
Thanks!
  回复  引用  查看    
#25楼  2005-09-28 10:03 | 王国清 [未注册用户]
我也要一份
wgq@yondest.com.cn
thanks
  回复  引用    
#26楼  2005-09-29 16:29 | Flyskywlh的未来----With .Net      
flyskywlh@126.com
thank you
  回复  引用  查看    
#27楼  2005-10-12 13:48 | firnfly [未注册用户]
谢谢,希望还能收到你的指点,没过期把!tianzhj@shtvu.edu.cn
  回复  引用    
#28楼  2005-10-14 22:21 | ww [未注册用户]
我也要开原的代码
请发到我的邮件箱:
wjq19821230@163.com

谢谢!!
  回复  引用    
#29楼  2005-10-15 09:53 | yuki [未注册用户]
学习中
请教中
yuki142528@yahoo.com.cn

3Q!
  回复  引用    
#30楼  2005-10-17 14:47 | lining [未注册用户]
给俺一份好吗
lining_12345@hotmail.com
谢谢
  回复  引用    
#31楼  2005-10-24 12:17 | tony du [未注册用户]
谢谢,
希望发到我的邮箱duys126@126.com
  回复  引用    
#32楼  2005-10-24 17:10 | huazaiboy [未注册用户]
huazaiboy@163.com 谢谢!
  回复  引用    
#33楼  2005-10-25 09:54 | Feiyu [未注册用户]
yifei21@tom.com 謝謝
  回复  引用    
#34楼  2005-10-25 09:54 | Feiyu [未注册用户]
yifei21@tom.com 謝謝
  回复  引用    
#35楼  2005-10-27 10:23 | dreamlbq [未注册用户]
mengshulbq@163.com
谢谢
  回复  引用    
#36楼  2005-11-12 13:55 | zwb [未注册用户]
zwbemail@tom.com
  回复  引用    
#37楼  2005-11-12 15:13 | ddddd [未注册用户]
alterstrx@163.com
  回复  引用    
#38楼  2005-11-18 15:47 | kegumx [未注册用户]
kegu_mx@hotmail
  回复  引用    
#39楼  2006-01-12 17:11 | Godnet [未注册用户]
我也正在学习,但不知道设计模式如何运用到实际中,给我一份吧,谢谢
fycnmail@sina.com

  回复  引用    
#40楼  2006-02-14 15:10 | 阳光男孩      
我也在学习设计模式,麻烦楼主也给我一份jxdyzwh@163.com
  回复  引用  查看    
#41楼  2006-02-23 21:34 | ework [未注册用户]
可以给我一份最新的吗?
多谢
crazyjh@gmail.com
  回复  引用    
#42楼  2006-03-08 08:23 | zhaojian [未注册用户]
我刚看了你的文章,觉得收益匪浅,能不能给我发份代码,领悟一下,谢谢了
zhaojian770627@gmail.com
  回复  引用    
#43楼  2006-03-08 21:12 | 万洪波 [未注册用户]
wxhxwan@gmail.com
  回复  引用    
#44楼  2006-05-09 16:32 | 厚道 [未注册用户]
我也需要。:)
xuhoudao@gmail.com
(上面开源项目的源代码跟应用的文章。多谢)
  回复  引用    
#45楼  2006-06-06 20:15 | e2mars [未注册用户]
thanks
codingfuture@hotmail.com
  回复  引用    
#46楼  2006-06-12 10:03 | oddly [未注册用户]
请也发一份给我好吗,谢谢了。
fest@sina.com
  回复  引用    
#47楼  2006-10-17 16:28 | Raysbo [未注册用户]
请发我一份,谢谢^_^
  回复  引用    
#48楼  2006-10-17 16:29 | Raysbo [未注册用户]
邮箱:Raysbo@gmail.com
谢谢 ^_^
  回复  引用    
#49楼  2007-01-15 16:53 | Sun[匿名]      
能否给我发一份啊,用C#开发的哪三个就可以
thanks so much!
邮箱:youxizhe@gmail.com

  回复  引用  查看    
#50楼  2007-04-12 12:01 | C# [未注册用户]
我也要 talenter66@gmail.com 谢谢楼主。。。。 期待你的回信啊
  回复  引用    
#51楼  2008-06-06 15:46 | 求知无傲      
现在还有么?511391577@163.com.THK
  回复  引用  查看    
#52楼  2008-09-11 11:27 | lou [未注册用户]
謝謝你的文章,可以發一份給我嗎?
  回复  引用    
#53楼  2008-09-11 11:28 | lou [未注册用户]
enjfun@163.com
  回复  引用    
#54楼  2008-09-25 08:05 | shanying [未注册用户]
谢谢。给我来一份把
shanying_0@163.com
  回复  引用    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-08-24 09:03 编辑过


相关链接:
 





  就他吧-9ta8伴您开心每一天