通用类库和业务类库的设计思想
在我们利用PB进行MIS系统开发时,有很多业务是通用的,并且有很多组件是可以复用的。为了提高MIS系统的开发效率,缩短开发周期,有必要把一些公用对象抽象出来,以便作二次开发。
这些通用的对象,一部分是针对基本功能进行扩充的,我叫它通用类库,采用加ufc_前缀的方式命名, 一部分是针对业务功能进行扩充的,采用加wfc_前缀的方式命名。
以下先从整体上描述整个类库的框架, 然后在从具体的类库来描述各个模块。
一、数据库框架
我们假定现在有两个MIS系统需要开发,分别是"应用系统1"和"应用系统2",其中应用系统1中有两年的数据,分别是年份1和年份2。为了实现系统功能的同一管理和代码在最大可能的重用,我们设计了整个系统的数据库框架:
如上图,我们分别对应用系统1的年份1和年份2以及应用系统2分别建立三个数据库: A1、A2和B。如果还有更多的应用系统的话,我们都可以建立更多的数据库与之对应。
这里,为什么应用系统1中年份1和年份2要建立两个数据库呢?由于很多MIS系统中,每自然年或者逻辑年后,系统的数据库都需要进行备份和封存,上一年的数据库一般就不允许再进行修改操作。这样,我们可以建立一个新的数据库来存放新一年的数据,应用软件可以在不进行任何修改的情况下实现多年数据的管理,并且能保证数据量不会过分膨胀。
把应用系统的数据库按年份来管理后,就产生了权限管理、数据库连接、数据库结转等问题,为了实现系统权限、用户等的统一管理,我们不在每一个具体的和业务有关的数据库中建立相关的表,而是再建立一个系统数据库S,通过它来对应用系统数据库进行连接和管理。在这个数据库中,一般包括以下表:系统用户表(User)系统角色表(Role),系统权力表(Power),角色模块权力表(RoleRPower),用户模块权力表(UserRPower),用户角色表(UserRRole),系统模块表(Module),系统对象表(Object),模块对象表(ModuleRObject)等权限管理表,为了实现其它一些通用的系统管理功能,还有一些通用的表,主要是:系统参数表(SysParm),系统字典表(SysTypeInfo),系统序列号表(SysSequence),表属性表(SysTable),
列属性表(SysColumn),系统消息表(SysMsg) ,历史表(HisTbl),事件日志表(EventLog),书签表(BookMark),系统程序表(Program),帐套表(AccountSet)等等。
数据库这样一改造后,权限管理分成了两部分,数据库权限管理和应用系统权限管理, 数据库权限管理通过数据库管理系统本身提供的功能来设置,应用系统权限通过应用程序来设置, 同时我们的应用程序也要改造了, 应用系统首先连接系统数据库S, 根据其连接的身份决定是否进行数据库管理(创建和维护帐套以及备份数据库等)还是连接业务系统,如果连接用户是系统数据库S的管理员,则打开数据库管理界面。 如果只是系统数据库S的普通操作员,则从S的帐套表中读出帐套信息,显示业务系统登录对话框,根据输入的业务系统连接身份以及选择的帐套,连接业务数据库A1或A2,连接成功后,根据其在业务系统中定义的权限(UserRight表)来决定其下一步的方向, 是打开业务系统管理界面,还是业务系统操作界面。 我们看看改造后的系统登录流程:
数据库这样改造后,系统的安全性获得了极大的提高,对于数据库管理员有至高无上的权力,它可以创建系统数据库S的连接用户,赋予其普通的数据库连接权限和对帐套表的SELECT权限, 它连接上系统数据库S后,可以创建帐套(即业务数据库),设置其数据库连接参数:用户名和密码等, 这些连接参数可以不必透露给业务系统管理员,而只需把在系统数据库S上创建的普通连接账号告诉业务系统用户就行了。 业务系统用户利用此账号来连接系统数据库S,然后从帐套表中取出所有的有效帐套,弹出业务系统登录对话框, 选择一个帐套以及业务系统的登录用户名与密码,进行登录,系统首先必须根据帐套获取此帐套实际连接的数据库以及登录的用户名与密码,假如我们是选择了A2, 利用表中设置的用户名和密码(当然是加过密的喽),连接A2数据库,然后从系统用户表(User)中检验其系统用户身份,通过后,才能登录到系统中。 这样,系统就建立了对两个数据库的连接。
除此之外,如果考虑到业务系统的本地化、个性化,在C/S构架下,我们可以再在每个业务系统的本地自动创建一个文件型数据库,一般可以采用Access和SQLAnyWhere来实现,也可以采用自己的格式来定义。在其中可以创建一些通用表:个性化表(Preference),方案表(Scheme),语言表(Language)等。
这样构架后, 一个MIS系统的数据就由三个数据库组成, 系统中必须保持对这三个数据库的连接, 在PB中,我采用了三个事务连接来管理,分别为:SQLSys, SQLCom , SQLLoc。
接下来,将在这个数据库架构下,进行通用类库搭建。
(待续)