关于模式争论的一点点思考
我是一位C++程序员,最近在了解模式方面的知识,让我没有想到的是,在模式和OO方面,会有这么热烈的争论。
当然,我发现在JAVA界,尤甚。
首先说说我为什么会关心设计模式,最直接的是我听说过这个东西,然后发觉这个东西确实为我的软件开发工作
指了一条路,至少我发觉它可以开阔你的眼界。其次是我在开发工作中遇到了问题,由于缺乏设计,做成的软件
扩展行和可维护性很差。举个简单的例子,我的一个项目中,由于数据层和表现层没有很好的分离,后来软件升
级,数据的组织形式和访问机制已经改变,为了适应这个改变,很多东西需要重写,包括展现层,而对于展现层,
其实并没有多大的改变!我想如果我当初多点考虑软件的设计,我想是可以把修改降到最低的。这只是一个简单
的例子,实际开发中遇到的问题远不止这些。
所以我开发关心设计,学习一些设计模式,尝试把它应用到实际的开发中。但是让我意想不到的是,在模式,OO
的运用上,存在这么多的分歧,而且当我跟朋友讨论起模式的时候,他正告我说小心走到模式的学院派里。于是
我开始关注这个问题。
于是我尝试问自己几个问题:
1,模式是什么东西,他可以给你带来的是什么。
2,应用模式到你的开发中,会有哪些负面的影响?
要回答这些问题,对于我现在的水平,显然是不容易的。所以这里写的,只能算是记录自己的心路历程,而
并非经验总结。
1,模式是什么东西,他可以给你带来的是什么。
这个问题相信有参与讨论的程序员都有自己的理解。我的理解是模式是特定场景下的特定问题的解决方法的指导。
离开了场景和问题,也没有模式一说。这些指导方法哪里来的,正确吗?它来源于丰富程序开发经验的程序员的
经验总结。是的,它是一个经验总结,是有经验的程序员们总结出来的解决特定问题的方法,这些方法的好处一般
是提高模块复用性,减少模块间耦合,增强扩展性等。它给你带来的最直接的就是提供给你一个解决特定问题的方法
,不是吗?那么你是否需要使用它呢?用不用,取决于你的判断,你的问题和你的开发场景。首先你要判断该模式是否
适用于你当前的问题,context和question是否一致,解决方法跟你的系统有没有什么冲突?在判断为适用的情况下?
就是否需要用这个模式来解决这个问题呢?下面我们会分析这个问题。
2,应用模式到你的开发中,会有哪些负面的影响?
模式的缺点,一般都是由于它的优点所引起的,只所以成为模式,必有它的可取之处,我的理解是一般在提高模块复
用性,减少模块间耦合,增强扩展性等方面起积极作用。但是这样的好处并不是免费获得的,首先,从写代码的角度来
说,你可能要写花费更多的时间去实现,有些简单的问题,或许你用过程化的解决方法,可以很快得到解决,但是运用
模式,你必须要分析你的应用场景,抽象你的问题,还需要理解你所使用的模式,掌握它,实现它。其次,由于模式一般
会在扩展行和复用性方面去考虑,代码的运行效率有时候就会必你直接的过程化实现要低,占用的资源也可能会上涨。这个
你就要考虑你是否可以承受。
为什么TCP的实现没有用OO的方法,为什么操作系统很少提供OO的API,为什么CPU也只是一条条
的执行指令,而没有提供更高的封装模型?这些情况延续到今天。
500个平方的豪宅,旋转式设计,当然你可以控制它的旋转速度或者是否旋转,智能化的家居摆设,全可由遥控器控制,
智能化的飞机起落平台,不需要的时候可以智能折叠。。。。所有的东西,基本上都可以应需而变,只要你喜欢。
但是,如果你只是一个旅客,只需要在这里住一晚,你是否乐意去住这样一个豪宅,如果你只是一届平民,口袋里只
有百来块钱,你是否认为这样的房子有必要存在?更有甚者,如果我根本不懂什么是高科技,而且我口袋里根本没钱,
难免我不会产生仇富思想,恨不得这个房子马上跨掉。。。。
人人都知道高级豪华小车好,但是我们生产最多的,可能是自行车。人人都知道豪宅住起来舒服,但是普通人只能挤进
50个平方的经济适用房。
无可否认,随着经济的发展,人们的生活水平会有所提高,正如硬件的发展,推动软件的发展一样。
东扯西扯,我想最主要的一点就是,不要什么东西都绝对化,我们生活的社会就是一个很好的参考,不断的学习,独立的
思考,是应该做的事情。