现在的位置: 首页 > 综合 > 正文

设计模式、框架、架构

2013年12月03日 ⁄ 综合 ⁄ 共 1624字 ⁄ 字号 评论关闭
文章目录

设计模式

举个例子来说:

有一面墙,现在要让一组人翻过去。
前面三个人用了三种不同的翻墙方式。后面排队的人发现第三个人的方式更好。所以他们都重复第三个人的翻墙方式。
这时,我们就可以说第三个人发现了一种“模式”。

通过这个例子,可以很容易的明白:模式是一种解决问题的思路,而不是具体的做法。
就好像大家都使用一种方式来翻墙,但具体到翻墙的动作时,每个人都会根据自己的身高、体重、体力等做适当的调整。至于先出左手还是右手就更是因人而异了。

在软件开发领域,设计模式是为解决某一类问题而提出的一种解决方案。因此,设计模式本质上是思想,而不是代码。
只不过为了让大家更容易理解,所以几乎所有讲设计模式的书都会把各个设计模式用代码体现出来。

正如《设计模式》一书作者所言,设计模式并不是拿来就用,而是要根据实际情况来写出合适的实现代码。
所以同一个设计模式,在 java 中是一种实现方式,在 php 中又是另一种实现方式。
甚至由于语言特性差异太大,一些在某个语言中非常重要的设计模式在其他语言中根本就是多余的。

由于设计模式关注的“点”是如此之小,所以实际开发中,你几乎不会遇到用了某某设计模式就可以解决一个业务问题的情况。
而且设计模式,主要的目标不是解决业务问题,而是改善代码的结构,从而整体上提高应用程序的结构质量。

许多开发者有一种误解,那就是“应用设计模式的目的是代码复用”。其实,设计模式追求的复用,是思想上的复用。
也就是你解决某一类型问题时的解决方案,可以在下一次遇到同类问题时重复使用。

架构

再来谈谈“架构”这个词。架构 —— 这个词的适用范围是可变的。

对于 google 整个公司的信息系统,有一个架构。具体到某一个应用,例如 google docs,又是一个架构。再缩小范围到一个应用程序,还是有一个架构。
所以,架构到底指什么,必须考虑这个词所处的上下文。

设计模式关注一个很小的“点”。架构则关注一个“面”。
架构,视图从整体结构上为解决某一组问题提供一个方案。

所以,在 Web 开发中,会有三层结构、N 层结构这样的说法。
实际上,这些结构就是一种更大规模的“模式”,可以称之为[b]“架构模式”[/b]。

框架

正如楼主所说,框架最初的定义是:一组相互协作的类,对于特定的一类软件,框架构成了一种可重用的设计。

但是,如果单纯只是一组类,我认为算不上框架,充其量只是“类库”。

例如 adodb 是用来简化数据库操作的,它只能称为一个类库,而不是一个框架。
同样,smarty 是模板类库,不是框架。

那么框架和类库到底有什么区别呢?这个没有确切的答案,每个人的看法都会不同。

从我个人而言,我对框架定义:解决跨领域问题的一种设计思想,以及设计思想的实现品。另一种说法是:类库是你去调用它,而框架是它来调用你。个人认为这种分类方法太简单了,因为现在即便是框架,通常也会提供许多可以独立使用的扩展库。

具体到 Web 开发框架。每一个 Web 开发框架,要解决的问题从数据库操作到用户界面实现,以及远程访问等等,跨越了多个领域。
而每一个 Web 开发框架,都有自己的设计思想。比如 RoR,它的核心思想就是“约定胜于配置”。
以这种思想,RoR 的创造者规划出来特定的框架结构、功能模块,并最终实现这些设计。

往细处看,框架还包含了许多“规则”。这些规则指出了对于某些问题应该怎么做,不应该怎么做。
只要遵守这些规则,框架的使用者就可以获得很大的方便,反之则会碍手碍脚。

框架的创造者根据自己的知识和经验,为解决某一个领域的基础问题,提出了自己的设计思想。
然后根据这个设计思想创造出了框架。在这个框架中,必然会运用许多设计模式来保持框架整体结构的质量。

所以设计模式和框架的关系很简单:设计模式是实现框架时用到的“工具”!

而架构和框架的关系就很复杂了。

对于一个简单的应用程序,整个架构就是框架的架构。
而对于复杂的应用程序,一个框架只是整体架构中的一部分。
例如表现层采用 PHP 和 xxxxphp 框架,而业务层采用 Java 和 xxxjava 框架。

抱歉!评论已关闭.