设计模式系列三——显示层之组合(2010-01-07)

现在的软件系统中,主要的开发形式是C/S和B/S两种。C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server 同数据库进行数据交互。
根据上面的特征我们应该如何设计软件架构中显示层呢?既然客户端分两种,那么我的设计是不是也应该为两种呢?其实在我看来,无论是哪种客户端,本质无非都是将后台数据库中以及业务逻辑中相关的数据友好的显示出来,将用户看不懂的计算机数据转化成用户看得懂的用户数据。有了这个本质特点,我们的设计思路可以先根据显示层的特点进行通用设计,再给据两种客户端的特点分别进行实现。
主体思路是使用页面或者窗体组合的方式进行设计。我们在进行项目开发之前,每个页面或者窗体的界面原型,是显示层设计的一个关键,也是一个依据。拿B/S客户端来说,在开发之前,我们应根据页面设计的情况进行归纳和总结,在进行分类和设计工作。比如:在系统所有页面中,我们有多少不同的多级下拉框,多少不同的表格,多少不一样的菜单;当然也会有很对同等规格的自定义控件,比如一组按钮的菜单,节点树和列表的组合使用等。找到分析这些控件就由为重要,我以一组简单的设计为例,如下图:

这个设计主要是在Struts2.0框架下的显示层设计,WebPagesAction包主要是各个子系统的Action对象,这个分开主要是为了方便大型团队的并发开发。WebPages主要包含个子系统的页面以及一个自定义页面包,包里面所含所有开始应使用的自定义控件,目的是在并发开发页面的同时,最大限度的增加页面的可重用性。自定义控件包内部还应根据情况进行分类,为了便于大家理解,我拿个sina网页做个实例(这仅仅是我的想法,只是拿sina网页做个例子,我并不知道sina是否真这么设计的,这里特此声明一下)。


这个是sina的财经页面,看我画红框的地方,这两个地方都是标题菜单,不同点就在于数量、行数、背景等不同,但本质都是一组按钮组合而成的。为了表述方便我给他们起个名字,上面叫“主标题菜单”,下面的叫“分类菜单”。现在我们来进行设计,如下图:

RopicMenu和SortMenu是接口Menu实现的两种方式,EconomicsPage又聚合了这个接口,当然我们在这个页面里面看到多个这样的接口实现,从而完成这个菜单的设计。这里重点就是使用工厂模式和组合模式。
窗体和网页在设计的大体思路上是一样,只是名称不同而已。而且在一个项目中两种客户端都使用的情况也是有的,这个要根据项目实际的需要进行相关的改造,但是此设计思想可以不变。
这里我还要说明一下我个人对于两种客户端形式开发的拙见,我认为从软件开发角度而言,客户端的不同只是我们在进行数据显示时,显示的媒介不同罢了。而业务模型层中的数据层(持久层)和业务逻辑层的设计应该是和显示层分开的,所以说我们在进行设计的时候如论那种客户端,三层架构都是试用且好用的。只不过根据不同种类的客户端设计出来的结构会有所不同。比如,如果使用C/S客户端的话,就可以考虑一下尽量让一些不涉及数据的操作在客户端进行,从而减轻服务器端的压力。
上面主要说的是我在显示层的一点拙见,还希望朋友多提建议,指点一下小弟。

posted on 2012-02-10 14:25  张隽永  阅读(319)  评论(0编辑  收藏  举报