假如有这样一种需求:面向固定客户的网上购物系统,你会怎样设计这样的系统呢?
很显然,B/S结构已经不适用了。只要是通过浏览器访问的网页,只要知道URL,任何人都可以访问,就没有固定客户的限制了。
那么,C/S结构呢?C/S结构确实很适合局域网,但是,不要忘了,我们的客户可能会走遍地球的各个角落。(当然,不能连接Internet的地方我们不予考虑)
那我们考虑这样的结构:Winform(.Net)+WebService(Java)。
WebService的协议.Net和Java都是支持的,但是有一个问题:这两者之间可以传递基本类型,但是不能传递引用类型。
没有关系,只要可以传递字符串,那就代表一切都可以传递,最终的解决方案如下:
客户端发送请求的时候,先把对象序列化为XML文件,将内容发送到服务器端,然后服务器端将XML文件反序列化为一个对象。服务器端返回相应的过程也是如此。

到了这里,最大障碍都已经解决了,先画出大概的流程图:

可以看出来,客户端和服务器交互利用的是XML,对象和XML相互转换利用的是一个开源的组件,可以参考http://java-cs-bridge.sourceforge.net/

2)服务器端发布WebService利用的是Axis,但是我们对其进行了封装,所有的客户端请求都只会调用一个Service,传递到这个Service的数据包括它的对象以及具体需要执行的Service。

3)服务器端的设计模仿了Struts,每个Service Action都只调用Logic,由Logic执行业务逻辑。

4)数据库访问我们封装了dbutils,虽然不是ORM,但是却可以有很灵活的SQL语句。

5)还有,整个系统运行过程中只有查询,只是在用户最后进行完成或者提交操作的时候,统一对数据库进行更新操作,这样做保持了数据的统一性,但同时也带来了一些隐患:如果运行到最后,网络断了的话,之前的操作都会没有被保存到数据库中。

这个设计无论是服务器,还是数据库,都是分布式、可插拔的,非常灵活。

我所能想到的也就这样子了,各位有什么建议,或者还有什么可以改进的,也希望不吝赐教。