设计模式之我见

 对于设计模式这个词,相信队里牛B的各位应该早已接触,并有着自己深刻的见解,在这里写这篇文章纯粹是为了抛砖引玉,希望能得到各位的指点,在这里我写出的我遇到过的问题,希望师弟师妹们可以不用再摔倒。

        老实说,这个东西我还真是最近才接触到的,因为之前一直就潜心于技术学习,但是最近发现,技术已经达到了一定程度,开发的思维还是停留在学期刚开始那段时间,项目开发中遇到的问题不再是技术,而是更多更多的其它,当中相当一部分是因为对工程管理繁琐的行为模式多半不够了解,其它则更多是对设计模式以及架构的思考不够周全,具个例子就是最近做的淘宝,对于数据加载模块,在实现了其加载功能后,我花费了很多时间进行了两次大面积的重构。重构的范围大,强度高,究其原因其实就是我在开始前没有对代码结构进行良好设计(虽然对系统架构有一定的规划),这是比较中层次的设计,架构之下,代码之上,这一步的设计良好意味这系统可维护性高,代码阅读难度低,扩展性好等等。但是偏偏就是少了这一步,才导致这两次重构的花销那么大;

        前面说了架构之下,代码之上,这个中间层其实就叫做设计模式,这个东西说难也不难,说简单也不是很简单,比架构简单许多,但是比代码又有更多可以考量的方面,早些时候,在我长水痘回家休养那几天尝试过带了本书回去好好研习,可惜当时觉得很难,没有耐着性子去学,现在返回来看,其实当时没有学习的决心多半是因为在自己的项目实战没有很好的应用到,也没有很好的回顾自己做过的东西,当我开始对现在的项目——淘宝进行重构时,当我开始考虑项目的可扩展性,可维护性时,我才发现我的代码混乱不堪,并没有发挥面向对象编程的优越性,代码重用率不高,代码结构混乱....于是我思考...

        于是,我开始着手学习,我发现其实在敏捷开发模式下,需求基本确定并经过大体设计后,还不是动手写代码的最好时机,这个时候你对自己需要完成的功能已经有了一定了解,你深信只要开始敲键盘,一定能在项目计划时间内漂亮的完成你的任务,结果往往是这样:虽然你的代码不漂亮,虽然你的功能是转了一个又一个圈之后,并且自己对代码中隐藏着的无论是技术上还是业务逻辑上的BUG都无法预测,自己对自己写就的代码没有信心的情况下,完成了你的任务。我深信一句话:代码是写给人看的,如果你是为机器编程的话,那么你也是机器了。你写的这些代码,当你离队之后就变成了所谓的遗留系统,你的师弟师妹无法理解,更无从维护,更别说系统的扩展性了(即使你的系统只是很小很小 的一个应用)。你的杰作很可能变成为了别人的诟病。当你拿到需求以及设计之后,我觉得需要考量的不是如何实现功能,这是技术上的问题,问题不大(实在不行就兜多几个圈),应该更多的把你的关注点放在你的代码组织上,如何组织,如何进行面向对象设计,来简化你的代码(越简单的代码,后期维护人员付出的学习代价越少,也越容易维护),提高可扩展性(今天做的可能是淘宝,明天做的可能是东京),提高代码重用率(如果你的代码通篇都存在着粘贴复制,那么你需要付出的体力是非常大的,特别是你需要修改其中某一点的时候),提高生产效率(不用说,如果你无法按时交付你的产品,你的客户一定多多少少有点意见)等等,而这些正是设计模式所追求达到的目标,我觉得代码组织能力,与技术无关,与管理无关,更多的是经验问题,经验越多,面对的功能需求就越容易出现熟悉感,就越容易从自己的开发经验中找到更好的解决方案,来组织你的代码,就像小帆说的,我们现在还没什么经验,你要一个没有经验的人着手设计出多优秀多么具有模式意义的框架是不可能不现实的,很遗憾的是,经验这种东西不能一蹴而就,它更多的是日常的积累以及不断的学习(持续不断的学习就好像持续不断的编码,而学习之后的总结则像是集成测试,题外话哈)。站在巨人的肩膀上,用老师的话讲就是前人栽树后人乘凉。

        处于这种这段的我能寻求到的最好的解决方案就是学习别人成功的设计模式,面向对象设计本身就比面向过程要复杂很多,面向对象是个好东西,但很多人(指的多是外面的人,我们实验室还是很强的)其实还处于面向过程的编码模式,因为很多人(包括我)还没有在认知层面上上升到面向对象的层次。《设计模式》这本书其实很薄,加上前后的广告才255页,但是里面的模式个个都不是那么好掌握的。在这里我给自己定了一些学习原则:

  • 不要过度依赖设计模式,很明显世间事物都有其语境,同一件事情在不同语境下自然有其不同的解决方案,意味的照搬照抄还不如就不要学了,因为这样会引入更多新的问题,比如代码复杂程度提高了
  • 不要过度深入,个人觉得读书应该只其所以然而不应该知其然,对技术行业,你Copy了别人的代码,就意味着你少了许多独立思考的机会,长期下去,百度就成了你IDE的一部分了,你就是一个代码机器人了;解决方案是看看别人的做法,通过思考将它转换为自己的一部分,对于设计模式而言就是看到别人的模式以及在模式产生前的思考,读书应该读到别人的思维!
  • 不要过度使用,除非在实际应用中迫切需要用到的情况下才需要考虑应用,千万别因为觉得有点设计模式的味道才能让人家觉得你很牛,结果往往是你的代码越发难以调试!

        前人栽树后人乘凉,其实学习就是借鉴别人的做法来解决实际生活中出现的问题,知其所以然就够了!读书应该是通过书籍来跟思维层次比你高许多的人交流,看看人家处于哪个语境下的思维方式。就先到这里吧,接下来会学那本《设计模式》,希望能对它有了解吧。这里说了这么多,其实都是个人观点,各位大牛别喷的太厉害了

posted @ 2012-04-01 17:21  菜鸟范  阅读(299)  评论(0编辑  收藏  举报