浅谈web系统的服务化(一)
对于系统的架构,特别是web前端(不包括js,css本身的框架)的架构,作为java工程师,每个人都有自己的意见,而且总是众说纷纭。从另外一个方面来讲,世界上没有真正的银弹,基于此,很难有一个全体程序员都接受的框架,只有在一定阶段适用的框架。
系统框架中的服务
服务的概念很久之前都产生,记得当初研究生导师给出了一句话,其实在编程语言的角度来将,真正的革命性的理念就是 面向对象的设计理念的推出,这些所谓的服务概念只不过是扩展而已。我认同这个观点,但是我同时认为服务的提出,虽然不够革命性,但是它在拓展人的编程思想有很大的推进作用。
1.关于什么是服务
很难讲,众说纷纭,我也给不了定义。但是个人认为的服务一定要体现内聚性,这样与外界的沟通要小。另外,对于提供出去的服务根据用户的需求,提供必要的再加工和扩展的能力。
看看维基的解释:http://en.wikipedia.org/wiki/Service_(systems_architecture)。可以看出来基本有两个概念:重用 & 协议。(这有点像个定义,我给出的还是偏向于实现)
2.服务的具体实现
服务也需要一个服务框架的支撑,基于维基和平时的感受,协议是构成服务最重要的基础:服务的接口定义,服务的结果返回格式,以及服务的传输方式等。我的伪定义上继续来讲,中间主要给出三个概念:少沟通,再加工,扩展。基本上来,这三个概念中,少沟通,与扩展,都是对于服务的接口,而再加工都是服务返回的结果。
2.1 网络的传输协议
说到这里,我想起来了中间件,衔接两个系统之间,支撑两个系统的沟通方式,这样的工具总能够很好的填补这里的空白。而网络传输的方式,有很多种,比如ISO的七层,TCP/IP的5层(有地方成为4层)等等,每层都可以作为支撑,或者基于这些传输再进行概念包装,RPC,RMI,dubbo等。然后基于这些概念,需要给出服务传输时候的接口以及返回结果的描述,如 wdsl,xdr 等等。
-----------------------后面需要实例补充-------------------------------------
2.2 服务的接口定义
接口定义个人觉得很重要。这个直接关系到服务抽象的粒度和好坏问题,一般来讲,越少的参数个数,意味着越少的外界沟通。服务就更加内聚。但是这里对参数也是有一个抽象,比如
public void add1(long a, String b, int c); public void add2(A a); class A{ private long a; private String b; private int c; }
public void addStudent(long id, String name, int age); public void addStudent(Student student); class Student{ private long id; private String name; private int age; }
/** ** addend : 被加数 ** added : 加数 ** times : 被加的次数 **/ public void addition(long addend, long added, int times); public void addition(Quantity quntity); class Quantity{ private long addend; private long added; private int times; }