三层系统架构方案.docx

上传人:b****5 文档编号:6691815 上传时间:2023-01-09 格式:DOCX 页数:12 大小:694.54KB
下载 相关 举报
三层系统架构方案.docx_第1页
第1页 / 共12页
三层系统架构方案.docx_第2页
第2页 / 共12页
三层系统架构方案.docx_第3页
第3页 / 共12页
三层系统架构方案.docx_第4页
第4页 / 共12页
三层系统架构方案.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

三层系统架构方案.docx

《三层系统架构方案.docx》由会员分享,可在线阅读,更多相关《三层系统架构方案.docx(12页珍藏版)》请在冰豆网上搜索。

三层系统架构方案.docx

三层系统架构方案

三层系统架构方案

说明:

在软件开发方法日益成熟的今天,很多公司都推出了平台化开发方案。

然而,虽然平台化考虑了整个系统架构的方方面面,但它却有实现非常复杂、维护非常麻烦、继承使用不灵活等缺陷。

于是,我就有了一个想法,能否开发一个轻型的系统架构,它能实现重要的技术方案,然而实现不是很复杂、维护不是很麻烦,继承使用也很灵活。

我朝着这个方向发展,最终实现了这种需求的系统架构。

内容概要:

概述:

本系统架构是采用RemObjectSDK技术研发的三层系统架构,由应用服务器、客户端框架和数据库三部分组成。

服务器:

采用面向对象方法设计而成,具有稳定性强、安全性高、负载量大、可扩展性强等特性。

采用数据库连接池技术、服务对像池技术和多端口监听等技术,使服务器的功能即强大又稳定。

已实现数据库操纵接口(对数据库进行各种操作)、广播消息接口、自动更新服务接口,另外用户可轻松地扩展自己需要的服务功能。

客户端:

采用面向对象方法设计而成,具有扩展性强、易于维护、学习简单等特点。

设计为插件模块,即插即用,即可自动生成菜单,又可手动调整;

已开发用户权限管理,拿来即可用,可严格控制客户端界面的权限,如(添加、删除等);

包括自动更新下载,随时都可以发布新的版本,客户端登录就可更新;

包括换皮肤功能,客户端界面非常美观;

客户端使用分页数据处理,让服务器沉受力更强;

客户端的网格具有自动排序功能,列头信息可调整保存

客户端有接收消息和发送消息功能,可与其它登录客户端进行消息通信。

开发了三个基类,分别用于不同用途的扩展继承(权限管理基类:

用于注册Form所包含的权限,如增加、删除;单表操纵基类:

用于对单表进行增删改查等相关数据表操作,严格控制操作状态;主从表操纵基类:

用于对单表进行增删改查等相关数据表操作,严格控制操作状态),从此三个类继承,稍做初始化赋值,就能完成相应的功能,也可以对方法进行重载,照自己的思路去开发。

 

客户端基类图:

主要界面演示:

应用服务器:

客户端主界面:

打开的子窗体:

系统功能调整界面:

主从操纵表

客户端目录及配置文件:

客户端自动更新界面:

 

角色权限分配:

用户角色分配:

 

基类及公共类简要说明:

1、权限基类:

TbaseSecurityfrm

权限基类主要有二大功能,一:

初始化窗体的权限点(如:

添加、删除等);二:

初始化窗体的菜单相关属性(如:

双亲、功能名、位置)。

有以下属性:

propertyRightList:

TFuncRigthreadFRightList;//权限管理列表

propertyFunctionID:

stringreadFFunctionIDwriteFFunctionID;//功能ID

propertyParentID:

stringreadFParentIDwriteFParentID;//菜单的双亲ID

propertyFunctionName:

stringreadGetFunctionName;//功能名称

propertyPosIndex:

IntegerreadFPosIndex;//菜单中同一级的顺序号

propertyImageIndex:

IntegerreadFImageIndex;//菜单中的图标序号

以上属性,除RightList、FunctionName外,其它属性都需要在继承窗体的OnCreate中初始化值,其中FunctionID必须在项目中唯一。

有以下方法:

procedureInitFunctionRight;virtual;//初始化Form的权限参数

procedureGetUserFunctionRight;virtual;//取得用户功能权限

窗体可以自定义权限点,需在InitFunctionRight中添加,

如:

FRightList.AddRight('Access','访问');

如何保存登录用户对窗体的使用权限,需要覆盖GetUserFunctionRight来实现,

如:

FRightList.AddHasRight(psName);

2、单表操纵基类:

TbaseDatafrm

单表操纵基类,主要实现对数据表的操纵和严格控制操纵时各控制的状态。

有以下属性:

propertyEditClass:

TBaseDataEditClassreadFEditClasswriteSetEditClass;//编辑Form类propertyTableName:

stringreadFTableNamewriteFTableName;//表名

propertyPKFields:

stringreadFPKFieldswriteFPKFields;//主键名,如有多个用;隔开

propertyQuerySQL:

StringreadFQuerySQLwriteFQuerySQL;//表名、视图名、查询语句

propertyPageSize:

integerreadFPageSizewriteFPageSize;//每页的大小(行数)

propertyCurrPage:

integerreadFCurrPagewriteFCurrPage;//要显示的当前页

propertyPageCount:

integerreadFPageCount;//总页数

propertyTotleRecord:

IntegerreadFTotleRecord;//总记录数

propertyGridCanEdit:

BooleanreadFGridCanEditwriteFGridCanEdit;//Grid能够编辑

propertyCanEditGridCol:

Boolean;//Grid列是否可编辑保存

propertySpiltGetPage:

BooleanreadFGetPagewriteFGetPage;//是否分页取数据

propertyNoUpdateFields:

stringreadFNoUpdateFieldswriteFNoUpdateFields;//不更新的字段列表,如有多个字段用;隔开

如果要对数据表进行编辑操作,必须对TableName、PKFields赋值,如果只是查询操作,则只需对QuerySQL赋值即可。

如果想在Grid中进行数据编辑,需对GridCanEdit赋值true,否则,需对EditClass赋值,EditClass必须是继承于TbaseDataEditfrm的子类。

如果想重新设置页大小,需设置PageSize的值,所有属性如要赋值都需在窗体的OnCreate中赋值。

 

有以下方法:

procedureChangeMasterStates(pbCanModify:

Boolean);virtual;//改变编辑表的控件状态

procedureGetPageData;//取得分页数据

procedureGetUserAction(psName:

string);//取得登录用户拥有的权限

如果用户想调整操纵数据时各控件的使用状态,需要覆盖ChangeMasterStates方法,对相关状态进行控制。

3、主从表操纵基类:

TbaseMasterDetailfrm

主从表操纵基类主要实现了对主从数据表的操纵控制处理。

有以下属性:

propertyGridDetEdit:

Boolean;//从表GRID可以编辑

propertyDetTableName:

string;//从表名

propertyDetEditClass:

TbaseDataEditClass;//编辑从表的窗体类

propertyDetPKFields:

stringreadFDetPKFieldswriteFDetPKFields;//从表主键

继承于TbaseMasterDetailfrm的子类,除了要对它的父类相关属性赋值外。

有以下方法:

procedureChangeDetStates(pbCanModify:

Boolean);virtual;//改变编辑从表的控件状态

procedureOpenDetDataSet;virtual;abstract;//打开从表数据集

注意点:

主表数据集滚动时,会执行OpenDetDataSet方法,所以取主表的从表数据,需在这个方法中实现。

4、数据编辑基类:

TBaseDataEditfrm

数据编辑基类用于编辑单条数据记录。

有以下属性:

propertyModifyState:

TModifyStatereadFModifyStatewriteSetModifyState;//状态

propertyDataSet:

TDataSetreadFDataSetwriteSetDataSet;//修改数据集

propertySoonSave:

BooleanreadFSoonSavewriteFSoonSave;//立刻保存

有以下方法:

procedureVerifySaveData;virtual;//校验保存数据合法性

procedureSetDataValue;virtual;//初始化其它信息

注意点:

如果要在保存之前对数据进行校验,需覆盖VerifySaveData方法。

5、扩展菜单基类:

TBaseMenufrm

扩展菜单基类用于扩展每个模块功能的父级菜单和分隔符。

有以下方法:

procedureAddDirAndSpile;virtual;//添加目录和分隔符

procedureAdd(psFuncID,psParentID,psFuncName:

string;piPos,piImgIndex:

Integer;

piFuncType:

TFuncType);//添加一个菜单功能

注意:

每一个子系统都必须实现一个TbaseMenufrm的子类,用于扩展该子系统的菜单功能树,每个继承子类都需覆盖AddDirAndSpile方法,添加相关菜单项。

6、本地数据操纵对象:

TLocalSQL

本地数据操纵对象是一个访问服务器对应服务方法的本地对象,在系统初始化时,就初始化了一个可以直接调用的实例。

它有以下调用方法:

//根据SQL语句取数据集

functionSelectData(constSQL:

String;outData:

Variant;outErrMsg:

String):

Integer;

//根据两条SQL语取两个数据集

functionSelectDupleData(constSQLA:

String;constSQLB:

String;outDataA:

Variant;outDataB:

Variant;outErrMsg:

String):

Integer;

//执行需要事务的SQL语句

functionExecuteSQL(constSQL:

String;outErrMsg:

String):

Integer;

//执行存储过程

functionExecuteProc(constProcName:

String;constParamArr:

ParamArray;

constRetRecord:

Boolean;outRetParamArr:

ParamArray;outData:

Variant;

outErrMsg:

String):

Integer;

//更新单表数据集

functionUpdateData(constDelta:

Variant;constTableName:

String;constKeyFields:

String;outErrMsg:

String):

Integer;

//更新两个表的数据集

functionUpdateDupleData(constDeltaA:

Variant;constTableNameA:

String;

constKeyFieldsA:

String;constDeltaB:

Variant;constTableNameB:

String;

constKeyFieldsB:

String;outErrMsg:

String):

Integer;

//执行SQL命令及更新另一个表的数据

functionUpdateSQLAndData(constSQL:

String;constDelta:

Variant;constTableName:

String;constKeyFields:

String;outErrMsg:

String):

Integer;

//根据SQL查询语句取得分页查询数据

functionGetQueryPageData(constSelectSQL:

String;varCurPage:

Integer;

varPageSize:

Integer;outtotalRecords:

Integer;outtotalPages:

Integer;

outData:

Variant;outErrMsg:

String):

Integer;

//取得唯一编号列表

functionGetUniqueID(consttableName:

String;constFieldName:

String;

constCount:

Integer;varIDList:

String;outErrMsg:

String):

Integer;

//取得系统时间

functionGetDatetime(outAValue:

DateTime;outErrMsg:

String):

Integer;

//根据SQL查询条件,取得查询到的记录数

functionGetRecordCount(constSQL:

String;outRecCount:

Integer;

outErrMsg:

String):

Integer;

7、窗体注册管理类:

TManagerForm

窗体注册管理类主要负责注册并管理需要用菜单打开的Form,在它所在单元,提供两个全局承数,用来注册Form和反注册Form,方法如下:

procedureRegisterClassE(AClass:

TPersistentClass);//注册窗体

procedureUnRegisterClassE(AClass:

TPersistentClass);//反注册窗体

因此,每个子系统下的子窗体,都需在pas文件的initialization段用方法RegisterClassE进行注册,在finalization段用方法UnRegisterClassE进行返注册,注意需要UsesFormManagerListUnt单元。

8、查询对话框类:

TdanngQryDlg

查询对话框是一个通用的生成SQL查询条件的对话框组件。

它有以下属性:

published

propertyQuerySQL:

string;//生成的SQL查询条件,不带where

propertyDataSet:

TdataSet;//要查询的数据集

propertyFields:

TStrings;//字段列表,格式为:

列标=字段名

propertyTitle:

stringreadFTitlewriteSetTitle;//对话框标题

propertyIsFilter:

BooleanreadFIsFilterwriteFIsFilter;//是否过滤查询SQL条件

propertyDatabaseType:

TdDataTypereadFDatabaseTypewriteFDatabaseType;//数据库类型

propertyBoolList:

TStringsreadFBoolListwriteSetBoolList;//字符串型逻辑字段列表,在属性的值格式为:

列标=标识假,标识真,如:

是否学生=’No’,’Yes’

propertyAssingedSink:

TAssingedSinkreadFAssingedSinkwriteFAssingedSink;//指定皮肤事件,为了使新创建的窗体有皮肤,需写此事件。

它有一个方法:

functionExcute:

Boolean;//返回值为真,则代表生成查询SQL条件正确,生成的查询条件为:

QuerySQL。

9.DBGrid列信息操纵类:

TxhGridCol

它用于初始化和保存DBGrid的列标信息,如一列改变长度,一列移到另一列前,改变后可以跟据登录用户保存起来。

它有以下属性:

propertyUserName:

string;//当前登录用户,

propertyGrid:

TDBGridEh;//操纵的DBGrid;

它有以下方法:

procedureSaveGridRowInfo;//保存Grid列信息

procedureLoadGridRowInfo;//装载Grid列信息

procedureClearGridRowInfo;//消除保存的列信息

开发演示,请看演示文档。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 教育学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1