层(Layer)的概念在IT世界中解决了很多复杂问题。随着基于Service的Web应用越来越多,Layer的概念离大众用户越来越近。希望我不善表达的文字能够把这个概念解释清楚。
分层的设计在程序设计中已经是最基本的设计模式(Design Pattern)之一。举几个例子让大家找点感觉。
作为一名非专业程序员,MVC的概念我都已经听说多年了,证明它有多么的古老。简单来说,MVC的设计模式将程序分解为Model,View,Control三层,分别负责数据,表现,业务逻辑。各层之间相互调用,但是又不是强耦合。
MVC的出现,使得软件设计分工成为可能,每一层可以将给不同的程序员维护。当然MVC还有其他好处,比如分布式部署等。我这个业余人事就不多发表评论了。
Hibernate 是Java中进行ORM(Object Relational Mapping(对象关系映射))的框架,通过Hibernate,可以使用操作对象的方法操作数据库记录,而且更改底层数据库不需要调整前台的代码。
URL Dispatcher是 Django 中我很喜欢的设计之一。可以让设计者设计非常Sexy的URL而不用考虑后台的文件结构。因为是URL解析之后指向View中的一个方法,URL可以在不变动后台代码的情况下随意修改。
上面的3个例子虽然比较偏技术,但是可以看出,多层架构的一个重要特点是“解耦”。将原本绑在一起的代码分散到不同的层上面去,这样让对其中某一层的单独维护甚至替换成为了可能。
互联网本来就是多层架构,分为7层。网络服务现在也有分层的趋势,照例还是看几个例子:
Paypal 是互联网分层的一个经典案例。当Paypal没有流行之前,网上支付是一件痛苦的事情。因为那时在美国全是信用卡付帐,网上交易对于用户来说存在风险。Paypal的出现,在用户和商家之间增加了一层支付层,商家拿到了只有一个Paypal账号,降低了支付的风险。至于提高了支付的便捷程度,我们可以认为那是副作用。
Feedburner 其实是一项很简单的服务,它将RSS Feed的订阅独立了出来,在网站和用户之间加入了一层。然后在中间层加入了数据统计,Feed优化等增值服务。
Openid 是最近很热门的一项服务,似乎让人们看到了全球唯一ID的可能性。Openid解决了用户注册及身份验证的问题,让用户不需要每到一个网站都注册一次。
垂直搜索引擎其实也是层技术的另一种应用,只是它面向的是用户但是却从多个数据来源读取数据。如果你对国内的垂直搜索感兴趣的话,可以看看 Qunar 和 Kooxoo 。
基于层的服务设计往往可以给人一新的感觉。从上面几个案例来看,每增加一层似乎都可以解决一部分问题。
不知道看了上面的例子之后大家是不是都有一种跃跃欲试的感觉,但是在大家去搭建自己的服务之前,可能需要注意下面几点:
本文只涉及到层服务很小的一个部分,写的不完善请见谅。
Comments