`
happmaoo
  • 浏览: 4336799 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

不用模式的理由

阅读更多
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/46860.html" frameborder="0" width="468" scrolling="no" height="60"></iframe>

周日去找sunway看他的半冰箱胶卷及扫描仪,一起吃完晚饭出来时,我想起reallike说过的一句话:不要跟sunway谈模式。于是趁机challenge了一下,结果还是比较有收获的。

关 于模式的问题我曾经跟令狐有过多次的讨论。sunway并不能算是一个严格的模式反对者,他只是反对在自己项目中采用模式。为此他举了很多的例子,基本上 我还是比较认可的。例子我就不一一列举了,有过一定的编程实践经验的人多少都会碰到类似的问题,但意识到的人并不多,我作一下大致的总结:

问 题主要表现在几个方面。

一方面是对于模式的初学者来说,很容易陷入为了模式而模式的误区。这里所指的初学者与学习设计模式的时间长短无关,而在于对设计模 式的理解上,仅仅是把所有的模式背下来是远远不够的。用我不厚道的话来说就是:“这只是一本人肉Reference”。

另一方面是这种对模式的“硬用”实 际上是低效的,因为很多时候你对某个模式的“硬用”根本就是错误的,结果必然导致在实现这一错误的“硬用”上花费很多不必要的时间,影响开发效率。

还有一 方面就是一个人对模式的“硬用”错误,在团队中开始可能还不被发觉(因为只要能用,这种潜在的问题通常是不容易发现的),随着项目的不断修改,可能到很后面才发现这里的“硬用”有问题,再来修改的代价就会很大。

最后 一 方面是在团队开发中,各人的理解各不相同,也许一个人认为应该在这里要用A模式,但另一个人却认为应该用B模式,或者一个人“硬用”的模式对另一个人理解 代码造成了不必要的障碍。

诸如此类都是sunway拒绝在项目中使用模式的合理理由,对此我基本上表示赞同。

模式的起源与其它计算机理论有 很大的不同,它源于建筑设计大师Christoph.Alexander的模式思想——甚至可以说是一种哲学思想,它与一般意义上的西方哲学有很大的不 同,而是接近于东方的古老哲学思想。在这一哲学思想中,有一个核心形容词叫做“生机勃勃”。当年GoF就是受到这一哲学思想的影响,从大量的实践经验中总 结出来设计模式的想法——他们发现在一些看上去“生机勃勃”的代码中,存在着一些共性的东西,他们对这些共性的东西加以总结,得出我们现在所知道的设计模 式。

C.Alexander在《建筑的永恒之道》一书里谈论到建筑模式语言时就说到过,同样的模式用在不同的地方,会有不同的效果,必须结合很多的方面综合考虑,唯一的原则就是要使最终的建筑具有那种生机勃勃的无名特质。

所 以,光会背模式和堆砌模式完全没有意义,因为这样的模式是“死”的,而不会是生机勃勃的。要会用好设计模式不是看几本书就能明白的,你需要在不用模式的情 况下编写大量的代码,慢慢地去体会那种对“生机勃勃”的感觉——当然你也可以说我这是经验主义,但对于编程这种事情来说,经验就是很重要的。

回 到sunway的话题上。他作为一名leader,重要的是能够让整个team高效地运作,而要达到这个目标,合理的投入产出分析是必要的。因为几乎不可 能要求整个team的所有成员都有足够丰富的经验去正确地运用模式,并且不会给别的成员带来误解,所以在他的team他的项目中使用模式带来的成本过于 高,那么不用当然比用要好。

对此,令狐也有一些相关的评论(我编辑整理过):

因为模式这个东西,不仅仅是 一个名字,还会跟环境、跟语言,跟很多东西相关。设计模式在设计时是可以作为一个名词交流的。但在实际编码的时候,绝大多数情况不会像书上的例子那样单 纯,是需要根据情况实际调整的(或者)根据需求,写出一些代码,这些代码事后可以发现跟某种模式相符。
另外还有一点,就是设计模式使用不当,很容易产生“过度设计”的问题,但是现在又没有一个有效的模式可以防止过度使用模式。
最 近看了一点《建筑的永恒之道》,总的感觉,我觉得它提到的模式,更像是一种东方文化和西方文化的杂交产物,是一种无法精确定量的东西。虽然它提到说模式必 须可以明确的表达出来。但是模式受到周围很多环境和事件的影响,很难用一个绝对教条的方法去归纳和实施。从一方面来说,模式本身可以精确定义和重现,这个 是很典型的西方哲学方法。但是,模式的应用,却受到很多外界条件的影响,甚至是一些难以描述的神秘状态的影响,同一个模式,在这个条件下应用,是合适的, 是好的,在另一个环境下,可能就变成了一个不好的,不合适的,这个又很东方化。

的确是这样,模式本身是明确的,但是应用模式的环境(包括软硬件环境和人的环境)却是千变万化的,没有经验和对“生机勃勃”的感觉是很难用好的。

也许对于小团队,一次性的项目来说,模式的“硬用”可能影响还小一些,或者会有一些好处,但是对于大团队,常变化的项目来说,为了避免模式“硬用”而完全禁用模式也不失为一种有效的管理方法。

总之我认为,模式绝对是个好东西,但不是绝对的好东西。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1793030


分享到:
评论

相关推荐

    二十三种设计模式【PDF版】

    艺术大家通常是创造出自己的套路,比如明末清初,水墨画法开始成熟,这时画树就不用勾勒这个模式了,而是一笔 下去,浓淡几个叶子,待毛笔的水墨要干枯时,画一下树干,这样,一个活生写意的树就画出来. 我上面这些描述其实...

    UNIX正文编辑程序VI命令简介

    有没有理由不用vi? 1.3 - vi能在多少不同的操作系统下面运行? 1.4 - 好吧, 你说服了我. 我决定开始使用vi. 我该从哪儿开始? 1.5 - vi有其他一些可用的变种吗? 2.0 - vi入门 2.1 - 有什么游戏帮助我们学习vi吗?...

    JeCat PHP Toolbox v0.1.1 Alpha 4

    你不用担心使用 JeCat PHP Toolbox 会局限你的 系统设计 思路, JeCat PHP Toolbox 是从 高级 OOP 层次组织代码的,符合 常规设计模式的概念。因此你可以轻松地在 这些自动产生的代码上 继续开发。并且 JeCat ...

    asp.net知识库

    不该用Generics实现Abstract Factory的理由 C#2.0-泛型 C#2.0-extern C#2.0-可空类型 C#2.0-分部类 C#2.0-迭代器 C#2.0 的新增功能学习 泛型的序列化问题 .NET 2.0 泛型在实际开发中的一次小应用 C#2.0 Singleton 的...

    Java Application Architecture Modularity Patterns with Examples Using OSGi Part2

    第一部分 模块化的理由 第1章 模块定义 1.1 定义模块 1.1.1 可部署 1.1.2 可管理 1.1.3 可测试 1.1.4 原生可重用 1.1.5 可组合 1.1.6 无状态 1.2 软件模块的简洁定义 1.3 结论 第2章 模块化的两个方面 ...

    Java Application Architecture Modularity Patterns with Examples Using OSGi Part1

    第一部分 模块化的理由 第1章 模块定义 1.1 定义模块 1.1.1 可部署 1.1.2 可管理 1.1.3 可测试 1.1.4 原生可重用 1.1.5 可组合 1.1.6 无状态 1.2 软件模块的简洁定义 1.3 结论 第2章 模块化的两个方面 2.1 运行时...

    MGMiaoBo:首创房间内多视频直播模式,移动直播新体验,多人秀场更好玩。随时随地与主播聊天互动亲密接触,清纯美女、校花嫩模、吃货萌妹、通通都有…… 1.项目引导页业使用ijkPlayer播放视频; 2.首页使用父子控制器进行界面之间的切换; 3.自定义MJRefresh刷新控件,替换头部刷新gif图片; 4.使用分类理由贝塞尔曲线为UIImageView添加圆角; 5.服务器交互使用的是https,用json格式,面向模型开发; 其他:全局网络请求封装,页面数据缓存处理,通知,动画,基础控制器封装,使

    下载项目,其实第二步可以不用了,下载下来的代码中已经包含framework,解压即可IJKframework,拖入项目 第二步: 下载framework,拖入项目 链接: 密码: 6h64 第三步: 解压framework,拖入项目,运行项目即可 第四步...

    jQuery 3 中的新增功能汇总介绍

    从jQuery 震撼整个 Web ,至今已有十年了,我们有很好的理由一直坚持使用维护它。jQuery为用户提供了 DOM 进行操作,执行 Ajax 请求,创建动画等等,极为友好的接口。此外,与 DOM API 不同的是,jQuery 采用了 复合...

    java 面试题 总结

    抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性...

    超级有影响力霸气的Java面试题大全文档

    抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承:  继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确...

    口水活动页面

    使用gulp来架构常规的运营活动页面选择使用gulp的理由不想把珍贵的时间浪费在刷新页面上,希望可以将屏幕分成两半,公司开发服务器经常挂掉,以前的sftp的开发模式不好用TinyPng图片压缩的官网经常访问不了,希望...

    dz微信机器人插件

    微信机器人,给会员一个关注你公众账号的理由! 本插件可大大加强论坛在手机上的互动性!详细功能请看功能列表 【安装说明】 http://www.pc2015.com/thread-16968-1-1.html首次安装必看【重要!】 【演示地址1】...

    单片机入门指南 初学者必看内容

    但是可以从软件方面和嵌入式系统开发模式上下功夫,提醒大家一点,嵌入式系统开发设计的内容知识很多,所以大家不要乱,在了解嵌入式系统开发的体系结构后,一步一步的下手,最容易上手的是linux下的C,比如ucos(有...

    iOS开发从入门到精通 [2021版]

    学习iOS开发,请选本套课程,理由如下: 1、233节大容量课程:包含了iOS开发中的大部分实用技能; 2、创新的教学模式:手把手教您iOS开发技术,一看就懂,一学就会; 3、贴心的操作提示:让您的眼睛始终处于操作的...

    icq6英文版 最新

    Status是指目前ICQ 的使用 模式,第一个是上线,第二是 暂时离开(上厕所、吃饭等), 第三是请勿打扰(Do not Dist urb)(此时messages或其他req uest ICQ 会自动拒绝对方), 第四是隐身术,此时就算是您 上线,网友也...

    Python-基础-入门 简介

    写起来快,缩进,不用打花括号,省手指,读起来舒服….. 喜欢,貌似不需要什么太牛的理由,用着顺手舒服就行 什么语言之争,编辑器之战啥的,能忽略就忽略吧,能无视就无视吧,工具,够用,用这舒服就ok了,浪费口水...

    Git权威指南PDF完整版

    第2章 爱上 Git 的理由/ 11 2.1 每日工作备份/ 11 2.2 异地协同工作/ 12 2.3 现场版本控制/ 13 2.4 避免引入辅助目录/ 15 2.5 重写提交说明/ 15 2.6 想吃后悔药/ 16 2.7 更好用的提交列表/ 17 2.8 更好的差异比较/ ...

    人工智能作文(5).doc

    人工智能作文 篇3 自从阿里巴巴的无人超市在杭州正式亮相,这种新型的售卖模式便在全国逐步展开。 无人超市不需要导购员、收银员,所有的操作都由机器人完成,这就意味着有一大部分 人将失去工作。随着科技的发展,...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码上方,统一规定使用三 个斜杠(///)来说明注释掉代码的理由。 D .不要在视图模板中加入任何复杂的逻辑。 多选 4.关于分页查询,下列哪些说法符合《阿里...

    windows实用dos命令大全

    一)MD——建立子目录 1.功能:创建新的子目录  2.类型:内部命令  3.格式:MD[盘符:]...(1)选用/A参数,为ASCII码比较模式;  (2)选用/B参数,为二进制比较模式;  (3)选用/C参数,将大小写字符看成...

Global site tag (gtag.js) - Google Analytics