1引言
1.1前言
首先有一点先和大家说明,我之所以说是解决方案,并不是说这个解决方案有多完美或架构多么完善,它只不过是我的第一个B/S软件解决方案,放在这里是和大家一起讨论的。所以,如果看完以后感觉是垃圾的话,也是有可能的。。。在网上也看过很多这样的解决方案,我想我这个要比他们说得更充实些。
好了,进入正题。
1.2开发环境
VS2005+Orac le9.0+第三方控件(Infragistics2.WebUI)
1.3所用技术
ASP.NET常用技术+Ajax+分层
2解决方案
2.1Model架构
先看下解决方案截图,如图-1所示
图-1
2.2非WebUI解决方案
D:\...\yljdWeb\项目是web site,属于程序的界面层。
yljd项目是控制台程序,可以用它来测试一些程序,对于程序本身来说,没有作用。
yljdModel项目是非UI层的所有内容,包括数据层、业务层之类 。当初为何只建这一个项目,原因是这个模块所涉及的业务和技术都比较简单,没有必要创建真正的数据层、业务层、实体层等。不过,这里面也是可以体现分层思想的,只是在后续的开发过程中,分层的概念有些模糊了。。。
其实,这个项目中的每个文件夹都可以单独创建一个项目,然后被其他项目以Dll文件形式引用。
2.2.1DbUtilities文件夹
图-2
DbUtilities文件夹属于数据层的,作用是用于与数据库进行交互。
IDbHelper是数据类的接口。
MsOralceHelper是微软提供的Oracle数据库方法类
OracleDbHelper是我们自己开发的Oralce数据库,不过大部分方法是调用MsOralceHelper中的。如图-3所示
图-3
注:这里还需要有个DbHelperFacotry工厂类,用于根据选项来组装使用哪个数据库。由于暂时只需要Oracle,所以没有增加
2.2.2Entity文件夹
图-4
实体文件,作用是数据库中表结构在前台的映射,可以代码生成器产生。比较简单,不再多述。
好像有的程序里,使用Entity这个东东与前台界面层交互,收集数据使用。我这个项目并没有使用此Entity收集数据,使用的是DataTable和DataSet,原因稍候再说。
2.2.3Service文件夹
图-5
作用相当于一个类库,作用是比较公用的方法,分门别类的存放在这个文件夹里,可以随时被其他文件所调用。这里比较简单,只有一个文件,其实可以根据功能划分成若干文件的,如:StringService,XmlService,IniService,DbService, AuthService(权限)等
2.2.4Business文件夹
图-6
作用相当于一个类库,但它偏重于业务类库,真正的某个行业的业务类库。
2.2.5Facade文件夹
图-7
这个文件夹定义有些模糊,我一开始是定义成调用外界方法的外观层,后来被我定义成两个作用:调用外界模块的方法和被外界模块所调用,两个作用,也就是说。不论是本模块引其他模块,还是其他模块引本模块,都引这个文件夹里的。
如果本程序中也用到此中方法,则需要在模块对应的Model文件中再声明一个方法,调用Fa?ade中的方法。不允许WebUI层直接调用Fa?ade文件
2.2.6Model文件
图-8
这里的每个文件,其实都是一个模块。例:ShiYanXMModel和ShiYanHZModel,两个文件其实就是实验项目和实验患者。也就是说,在前台中,每个模块都有一个专门Model文件与它对应,前台模块与Model文件是一一对应的关系。当然,Model文件都继承自BaseModel文件,比较通用的方法都写在BaseModel中就OK了。如图-9所示是BaseModel类的布局。
这一点好像和网上众多的项目中所采用的方法不同,之所以强调出来,是大家看看这样处理是否合理?或者说有什么隐患?
图-9
3 WebUI解决方案
图-10
如图-10所示,List页面是列表页面,它包含一个Frame框架,Frame框架所指向的地址就是ListGrid页面,大家想想也就清楚了。
现在说一下为何没有使用Entity类。
图-11
如图-11所示,是模块的保存操作,我使用的是DataSet作为填充的数据源,这样可以创建一个通用的方法Save来保存任何模块需要保存的数据。
4 待处理问题
这篇只不过是一个抛砖引用的文档,若有兴趣者,可以与我联系,一起研究!谢谢。
这里用到的每个技术点或实现方式,可能与大家有所不同,希望大家把自己的想法提出来,我们一起探讨。