基于WEB的数据平台GF2000系统核心库设计与实现-毕业论文_第1页
基于WEB的数据平台GF2000系统核心库设计与实现-毕业论文_第2页
免费预览已结束,剩余6页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

厦门大学软件学院本科生毕业论文本科毕业论文(科研训练、毕业设计)题目:基于WEB的数据平台GF2000系统核心库设计与实现姓 名:学 院:软件学院系:专 业:软件工程年 级: 学 号: 指导教师(校内): 职称:指导教师(校外): 职称: 年 月 日厦门大学软件学院本科生毕业论文基于WEB的数据平台GF2000系统核心库设计与实现摘要 厦门恒好进出口有限公司(Good Forever)是厦门一家对外贸易公司,GF2000项目为该贸易公司提供一个统一的数据平台,以加强数据共享,提高工作效率,为公司决策提高量化数据。以改变该公司现有的以文件级共享为基础、大量手工操作为方法的低效信息共享方式。GF2000项目的关键之一是设计系统核心库。系统核心库是本套系统的通用方法集合,包含在Utils.asp中。系统核心库的开发对于代码复用以及系统良构方面都有重要意义。系统核心库的实现有效降低了具体页面的开发工作量与开发难度。系统核心库的内部组织结构是基于MVC构架。MVC即Model(模型)、View(视图)、Controller(控制器),是一种目前广泛流行的软件设计模式。MVC把一个应用的输入、处理、输出按照Model、View、Controller的方式进行分离,形成三个层模型层、视图层、控制层。关键词 MVC构架 WEB应用 函数库设计Abstract The Good Forever Co. is a foreign trade company in Xiamen. The GF2000 system provide the Data Platform for the Good Forever Co. to improve the data-sharing and work-efficiency, and better the decision-making for the company. The GF2000 system reform the way to share the information.One of the key process of this project is the design for the System-Core-Library。The System-Core-Library is the set of general method for this system. The file named “Utils.asp” include the System-Core-Library. It makes significant sense not only to the reuseabilty of the code but also to the architecture of the system. The application of the System-Core-Library lower the workload and difficulty of the page coding.The System-Core-Library is organized by MVC truss. MVC, which means Model, View and Controller, is a widely used design pattern. MVC separates the input, processing and output according to model, view and controller. It has three layers - model layer, view layer and control layer.Keyword MVC WEB application function-library design.目录第1章 绪论11.1 引言11.2 主要工作1第2章 需求分析22.1 开发软件环境22.2 项目任务概述22.3 功能需求概述32.4 性能需求概述3第3章 系统核心库设计与实现43.1 系统核心库简介43.2 系统核心库设计43.2.1 设计目标43.2.2 设计思想53.2.3 本系统界面功能说明63.2.4 提取通用方法123.2.5 MVC构架的组织163.3 可扩展部分设计20第4章 系统核心库应用224.1.1 核心库主要接口224.1.2 核心库应用示例23第5章 总结30致谢31参考文献:32厦门大学软件学院本科生毕业论文第1章 绪论1.1 引言厦门恒好进出口有限公司基于业务扩展的需要,迫切需要一个统一的数据平台,以加强数据共享,提高工作效率,为公司决策提高量化数据。拟开发一个“恒好工作平台”(Good Forever Working Platform),命名为GF2000平台。GF2000开发过程中,希望首先设计一个可通用的函数集合,集成大量功能实现方法,形成系统核心库供具体页面调用。通过系统核心库的开发实现代码的高复用性以及系统的良构性。开发系统核心库,首先应该依据功能需求,抽象出公共的可复用的行为,提取通用方法。系统核心库内部结构将使用MVC构架对提出的通用方法进行组织,封装大部分函数,留下少量接口。系统核心库的实现有效降低了具体页面的开发工作量与开发难度。1.2 主要工作1 熟悉恒好公司的整体业务流程,收集整理所需管理的数据。2 对GF2000项目进行需求分析,形成完整的需求分析文档。3 完成对数据库的设计。4 完成系统核心库的设计、实现与测试。5 根据需求分析文档,应用系统核心库,编写具体的ASP页面实现需求。6 对完成页面进行单元测试与集成测试。本人主要负责数据库设计与系统核心库设计实现的部分工作,以及出货管理与收汇管理功能模块的需求分析与设计实现工作。第2章 需求分析2.1 开发软件环境软件类型软件名称服务器操作系统Windows 2000 Professional服务端软件IIS5.0数据库软件SQL Server 2000开发工具UltraEdit11.0, FrontPage2000客户端应用平台Windows 2000/98应用软件IE、Office系列表格2.1 开发软件环境表2.2 项目任务概述恒好公司(Good Forever)是厦门的一家贸易公司,GF2000项目为该贸易公司提供一个统一的数据平台,以加强数据共享,提高工作效率,为公司决策提高量化数据。以改变该公司现有的以文件级共享为基础、大量手工操作为方法的低效信息共享方式。该数据管理平台主要涵盖系统管理模块与数据管理模块。通过系统管理模块,可提供对不同用户的访问权限控制。通过数据管理模块,可实现对客户与项目信息、定单、收汇及出货信息,以及产品与样品信息的实时跟踪与自动化管理。该数据管理平台可很大程度上加快信息交流速度与信息共享质量,从而提高公司工作效率。通过对该数据平台的设计与开发,有效组织公司的大量数据,实现办公的自动化,继而实现公司信息管理的系统化。通过对该系统的研究,形成一套针对于中小型的贸易型公司的数据管理平台的开发思路与模式。开发过程中形成高复用性模块,以加速今后类似数据管理平台的开发速度与质量。系统采用B/S结构,后台基于SQL Server 2000数据库,前台采用ASP开发,完成后的系统将可在浏览器上完成绝大部分的数据显示与操作,另外涉及到需要输出的文档均以文本文件、邮件、Word文档或Excel文档的形式,方便易用。2.3 功能需求概述根据公司的业务特点与业务流程,系统划分为:业务模块和系统模块。业务模块包括产品管理、项目管理、样品管理、定单管理、出货管理、收汇管理六个子模块系统管理模块包括用户管理和基础数据子模块。GF2000系统业务模块收汇管理产品管理系统管理模块项目管理样品管理定单管理出货管理基础数据维护用户管理图表2.1 GF2000功能模块分解图2.4 性能需求概述1 数据有效性要求:系统对用户输入数据有效性进行验证,尽可能的将验证放在客户端进行,以减轻服务器负担。对于无效的数据输入,要求有相关的提示信息。2 时间特性:要求系统实时响应。查询结果与数据库提交结果均要求在1秒内返回。3 负载要求:支持30个左右连接,系统仍能实时相应用户操作。4 安全要求:运行于内部网络,安全要求不高,但需禁止跳过登陆而直接输入URL访问。第3章 系统核心库设计与实现3.1 系统核心库简介系统核心库是本套系统的一个函数集合,包含在Utils.asp。它集成了业务层与表示层的实现。系统核心库的内部组织结构是基于MVC构架(3.2.2)的。系统核心库封装大量函数,提供一些接口,其他页面通过接口加载并调用其中的函数,完成相应的功能。应用系统核心库使得页面代码变得简单清晰,易于编写与维护。使用语句,将系统核心库加载至具体页面中。3.2 系统核心库设计3.2.1 设计目标开发系统核心库主要基于以下两点原因:a.实现高复用性与功能集成性。从需求分析的角度看,本系统可分为八个模块,各个模块的业务逻辑相差甚大。但从程序内部的实现逻辑上看,却有较大的共性,换而言之,即内部实现上可能通过抽取通用部分,形成可复用代码,减少代码的重复,提高开发效率。b.实现逻辑层与表示层分离。一般的,ASP页面编写时,存在显示与逻辑结合紧密的弊病。当页面较复杂时,显示与逻辑紧密结合的页面代码可读性就会变得很差,也不利于调试。抽取通用方法,并且将这些通用方法有机的组织封装起来,留下少数接口,编写页面时只需调用这些接口,页面代码清晰易读并且代码量小。页面代码不包含复杂的显示与逻辑代码,也便于跟踪调试。3.2.2 设计思想 基本思路设计系统核心库的思路就是通过对功能需求与界面需求的研究,抽象出通用方法,再应用MVC构架,将大量的通用方法集成起来,留下少量的接口供其他页面直接调用。系统核心库设计思想是基于MVC设计模式的,用以实现功能与显示的解耦合。 MVC介绍模型视图控制器(MVC)是Xerox PARC在八十年代为编程语言Smalltalk80发明的一种软件设MVC是许多交互和界面系统的构成基础。对于界面设计可变性的需求,MVC把交互系统的组成分解成模型、视图、控制三种部件。模型(Model):封装的是数据源和所有基于对这计模式,至今已被广泛使用。些数据的操作。在一个组件中,Model往往表示组件的状态和操作状态的方法。视图(View):封装的是对数据源Model的一种显示。一个模型可以由多个视图,而一个视图理论上也可以同不同的模型关联起来。控制器(Controller):封装的是外界作用于模型的操作。通常,这些操作会转发到模型上,并调用模型中相应的一个或者多个方法。一般Controller在Model和View之间起到了沟通的作用,处理用户在View上的输入,并转发给Model。这样Model和View两者之间可以做到松散耦合,甚至可以彼此不知道对方,而由Controller连接起这两个部分。模型,即相关的数据,它是对象的内在属性;视图是模型的外在表现形式,一个模型可以对应一个或者多个视图,视图还具有与外界交互的功能; 控制器是模型与视图的联系纽带,控制器提取通过视图传输进来的外部信息转化成相应事件,然后由对应的控制器对模型进行更新; 相应的,模型的更新与修改将通过控制器通知视图,保持视图与模型的一致性。 图3.1描述了这三者之间的关系:图表 3.1 MVC结构MVC 式的出现不仅实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性。 MVC实现思路分析应用问题,分离出系统的内核功能、对功能的控制输入、系统的输出行为三大部分。设计模型部件使其封装内核数据和计算功能,提供访问显示数据的操作,提供控制内部行为的操作以及其他必要的操作接口。以上形成模型类的数据构成和计算关系。这部分的构成与具体的应用问题紧密相关。设计每个视图的显示形式,它从模型中获取数据,将它们显示在屏幕上。对于每个视图,指定对用户操作的响应时间和行为。在模型状态的影响下,控制器使用特定的方法接受和解释这些事件。控制器的初始化建立起与模型和视图的联系,并且启动事件处理机制。事件处理机制的具体实现方法依赖于界面的工作平台。就本系统而言,由于用户输入的形式比较固定,所以响应用户输入的工作就不必经过控制器(Controller),而是直接放在模型(Model)中进行处理。3.2.3 本系统界面功能说明从本数据平台的界面需求来看,要求界面风格统一,主要的功能页面可分为两种类型:查询列表页面与明细关联页面。一般的,某个查询列表页面必与某个明细关联页面一一对应。查询列表页面主要负责根据用户输入的条件,列出满足条件的数据,该类页面可细分为查询域与列表域。查询域负责接收用户输入的查询条件,列表域负责根据用户的输入,列出相应的数据。查询域可接受一般文本框输入(直接输入),下拉列表框输入,相关弹出框输入(双击显示相关输入弹出窗口,如图3.3),日期弹出框输入(双击显示日期输入弹出窗口,如图3.4)。查询条件可为相等、相似、和区间查询,同时还应有跨多个字段的查询。查询域有“查找”按钮,用于提交页面。列表域有“删除”、“新增”、“查询结果导入EXCEL”按钮,点击“删除”按钮,删除复选框打勾的记录;点击“新增”按钮跳转至相应的明细相关页面执行新增功能;点击“查询结果导入EXCEL”按钮,可以将列表域的结果生成相应的EXCEL文档。列表域包含列表标题,列表内容(查询结果),翻页按钮。其中翻页按钮是当列表内容过多而分页显示时做翻页之用双击列表内容的某条记录时,跳转至相应的明细相关页面,明细相关页面显示图3.2是一个查询列表页面的Demo列表内容翻页按钮列表标题一般文本框输入日期弹出框输入框相关弹出框输入列表域查询域图表 3.2查询列表页面的Demo相关输入弹出窗口图表 3.3 相关输入弹出窗口Demo日期输入弹出窗口图表 3.4 日期输入弹出窗口Demo明细相关页面主要负责对某表信息的增删改操作,以及相关信息的显示。明细相关页面有新增,编辑,查看,删除几种状态,根据状态不同,其显示样式有所不同。删除状态不显示信息,而是跳转回相应的查询列表页面。查看状态下(如图3.5),明细域不可输入信息,明细域底部有三个按钮。点击“编辑”按钮将当前页面状态转为编辑状态。点击“删除”按钮将当前对应的记录删除。点击“返回”按钮,跳转回相应的查询列表页面。关联域显示与此记录相关的其他表的信息。有多个关联信息时,通过关联信息选项卡进行切换。关联域的显示样式与实现功能类似于查询列表页面的列表域。编辑状态下(如图3.6),显示当前记录对应信息,并且可以编辑。明细域可接受用户输入,输入形式与查询列表页面的查询域输入类似。明细域底部有两个按钮。点击“保存”按钮将当前信息保存入数据库;点击“返回”,跳转回相应的查询列表页面。新增状态下,显示样式类似编辑状态,如图3.7图3.5图3.6与图3.7是明细关联页面不同状态下的Demo下拉列表框输入明细域图表 3.5 编辑状态下明细关联页面Demo关联信息选项卡关联域明细域图表 3.6 查看状态下明细关联页面Demo明细域图表 3.7 新增状态下明细关联页面Demo3.2.4 提取通用方法系统可复用方法大致可分为以下几种:数据库访问类,HTML流分析处理类,文件上传控制类,数据有效性验证类,SQL语句生成类(细分),按钮脚本生成类(细分),显示脚本生成类(细分)。以下对于每一种方法类型,根据其要求实现的功能,归纳出所需的最重要的方法。a.数据库访问类:主要负责对SQL语句的执行以及对数据库错误的捕获与处理。主要方法包括:Function SQLQuery(sql) 该函数执行输入的sql查询语句,如果出错则显示出错信息,返回结果集。一般用于执行Select语句Sub SQLExec(sql) 该函数执行输入的sql操作语句。一般用于执行Insert,Update,Delete语句Function SQLSelectOneField(sql) 该函数执行输入的sql查询语句,返回结果集的第一条记录。一般用于查询符合特定条件的一条记录的一个特定字段的值。b. HTML流分析处理类:主要负责分析处理用户提交的请求。当用户提交的请求为纯文本是,才可以用ASP的Request对象直接获得某控件名对应的值。而当用户提交的请求为文本与二进制数据混合体时,要想获得某控件名对应的值,就必须分析HTML流,分离文本与二进制数据。从实际应用来看,改进了以往上传文件(二进制数据)需要独立提交的处理方式,即实现了在一次提交请求中完成上传文件与文本信息的提交。主要方法包括:Function GetHTTPPostStream() 该函数截取并返回当前HTTP流(二进制)。一般不由用户直接调用,应封装于其他函数。Function GetDictDataFromHTTPStream(sCome) 该函数根据输入的HTTP二进制流,分离其中文本数据与二进制数据,生成dictionary对象保存分离出的数据,并返回此dictionary对象。一般不由用户直接调用,应封装于其他函数。Function GetTextfromBin(srmSource,posBegin,posLen) 该函数根据输入的二进制流srmSource,及其开始位置posBegin与结束位置posLen,将此段二进制数据转为文本数据返回。一般不由用户直接调用,应封装于其他函数。Function MyRequest(DomainName) 该函数根据用户输入的控件名DomainName,返回用户请求中对应的值。该函数通过调用GetHTTPPostStream(),GetDictDataFromHTTPStream(sCome)与GetTextfromBin(srmSource,posBegin,posLen)方法实现。基本流程就是:一.用GetHTTPPostStream()获取当前的HTTP流,作为参数传递给GetDictDataFromHTTPStream(sCome)。二.GetDictDataFromHTTPStream(sCome)函数通过分析HTTP流,用GetTextfromBin方法分离出控件名(文本型)作为字典键,再分析其后的数据的类型:若为二进制数据,则转换为“文件名,类型,起始位置,文件长度”的字符串形式生成相应的键值;若为文本数据,则按字符串形式生成相应的键值。按(字典键,键值)的形式加入字典中。三.最后根据输入的控件名DomainName作为字典键,查找相应的键值返回。c. 文件上传控制类:实现文件上传的功能。在服务器端保存用户上传文件。主要方法包括:Sub saveBin2File(srmSource, posB,posLen,strPath) 该过程根据输入的文件流srmSource,开始位置posB,文件长度posLen,将此段文件数据COPY至服务器目标路径strPath下。Sub UploadFileDeal(sStream, dicData, FieldName, TableName, ID) 该过程完成文件上传的存盘和删除动作, 同时会更新数据库表中的新上传文件的扩展名。d. 数据有效性验证类:主要实现对提交至数据库的数据有效性的验证。虽然数据库本身亦有数据有效性验证的功能,但是我们仍希望通过自己的方法实现,原因有二:1.某些验证可以放在客户端脚本中,使验证工作直接在客户端进行,减轻服务器端压力。2.对于提交的无效数据,应该有相应的友好的提示信息,这一点必须通过编写客户端代码实现。主要方法包括:Sub WriteClientCheck(FormName, arrDomainDefines)该过程用于检验提交的表单FormName,数组arrDomainDefines描述了需要检验的控件及其需要验证的项目。需要验证的项目包括:1.必填字段2.最大长度限制3.为数值4.为日期5.最小值限制6.最大值限制。 发现无效字段,则将其对应控件的值清空,显示提示信息,服务器端不继续处理该表单,返回原页面等待用户重新输入。该函数还应检测当前页面状态,仅在新增或编辑状态下需要进行数据有效性验证。e.SQL语句生成类:主要实现sql语句的自动生成。可细分为SQL查询语句生成类与SQL操作语句生成类。SQL查询语句生成类方法主要用于查询列表页面的处理,SQL操作语句生成类方法主要用于明细关联页面的处理。SQL查询语句生成类主要方法:Function AddSearchCondition(Search_Fields, Search_Origin_Fields) 该函数用于补充sql查询语句的查询条件的。形如“Select From Where ”形式的sql查询语句,其中“Where”之前的语句可由用户输入,“Where”之后的语句(即查询部分)必须由函数动态生成。该函数就是通过用户输入的数组Search_Fields与Search_Origin_Fields,在根据具体页面提交的表单,动态生成sql查询语句并返回。查询条件包含相等、相似、大于、小于、区间查询,以及跨多个字段的查询。该函数在用户输入的sql查询语句中添加查询条件并返回。该函数一般不由用户直接调用,封装于其他方法中。SQL操作语句生成类方法,由于语句比较简单,不需形成独立的函数,其代码直接封装于操作数据的方法中。操作数据的方法主要有:Sub Bill_Insert(ATableName) 该过程自动生成SQL插入语句并执行,完成添加记录至表AtableName的功能。该函数一般不由用户直接调用,封装于其他方法中。Sub Bill_Update(AtableName,Bill_ID) 该过程自动生成SQL更新语句并执行,完成修改表AtableName某条记录(ID=Bill_ID)的功能。该函数一般不由用户直接调用,封装于其他方法中。Sub Bill_Delete(AtableName,Bill_ID) 该过程自动生成SQL删除语句并执行,完成删除表AtableName某条记录(ID=Bill_ID)的功能。该函数一般不由用户直接调用,封装于其他方法中。f按钮脚本生成类。可细分为提交按钮类,翻页按钮类与生成客户端对象类。提交按钮类方法,主要为新增、删除、保存、返回等按钮编写相应的。脚本本身比较简单,关键是根据页面动态生成脚本。翻页按钮类主要实现“前翻至第一页”“前翻五页”“前翻一页”“后翻一页” “后翻五页” “后翻至末尾页”六个按钮的功能。用于当列表域信息分页显示时翻页之用。生成客户端对象类方法,其中最重要的就是实现“查询结果导入EXECL”按钮功能。该按钮出现在查询列表页面(如图3.1),功能要求在该按钮被按下后,在客户端生成Excel对象并将当前列表的内容导入。g.控件脚本生成类:某些控件要求页面动态生成而非静态HTML代码。主要方法有:Sub WriteFlagBox(ControlName, TableName, FieldName)在客户端生成一个控件名为ControlName,与用户表TableName的FieldName字段联系的下拉列表控件。一般在用户页面中调用,生成下拉列表控件。Sub WriteCheckField(CheckTableName, CheckFieldName, FK_IDFieldName, Size)生成一个弹出输入框。Sub CheckFieldSelect(CheckTable, OriginField, CheckField, DestListURL)生成一个文本控件与隐藏控件,并生成该文本控件的双击事件脚本,双击可弹出输入框。h.显示脚本生成类:可细分为列表域显示类与明细域显示类。列表域显示类:查询列表页面要求根据查询域的输入值,动态更新列表的显示。此项功能将通过调用过程Sub Write_CheckField_List()实现。明细域显示类:明细关联页面要求能从数据库中读出相关的值并填充明细域相关控件。因为明细相关页面的显示与其页面状态相关(见3.2.3小节的描述),所以对明细相关页面的显示将封装于MVC构架中VIEW部件中。3.2.5 MVC构架的组织 Model模块的构成本系统通过函数Function Bill_Model(DBTableName)实现处理明细关联页面的Model模块的功能。BillModel封装了Bill_View(ATableName, ID), Bill_Insert(ATableName), Bill_Update(ATableName, ID), Bill_Delete(ATableName, ID) 四个方法,根据用户提交页面的状态,调用相应的方法。Bill_Model处理流程如图3.8所示:Bill_Model(DBTableName)函数入口。1调用MyRequest(DBTableName & _ID)获得当前页面对应记录的ID值。2调用MyRequest(“Method_Call”)获得当前页面的状态 判断状态Bill_ViewBill_InsertBill_DeleteBill_Update“EDIT”“VIEW”“ADD_SAVE”“EDIT_SAVE”“LIST_DELETE”“DELETE图表3.8 Bill_Model函数处理流程Model模块是司数据库访问操作,管理数据模型的模块。其中通过Bill_Insert,Bill_Update与Bill_Delete方法对数据库进行操作,屏蔽了用户页面直接对数据库的操作。调用结束后,还需通过改变页面状态或者跳转页面的方式改变视图状态。Model模块的设计,还包括在数据库建立系统表Sys_Field,用以记录用户表的元数据信息。Sys_Field表结构如表3.1所示:表英文名Sys_Field表中文名数据类型定义描 述主 键 ID 字段英文名中文名类型非空描述IDIDTinyInt(1)Y主键Table_Name字段所在表名Varchar(30)YField_Name字段名Varchar(30)YData_Type数据类型TinyInt(1)Y整数 0字串 10长宽高 3重量 4价格 2Check_Type检查类型TinyInt(1)Y默认 0备注字段 1Is_Flag是否标识位TinyInt(1)Y否 0是 1如果是需要在Sys_Flag表增加一条记录CF_Table关联表Varchar(30)如“订单表”上面的Cust_ID对应这里是“客户表”CF_ID关联表ID字段名Varchar(30)一般是ID,如客户表的”ID”字段CF_Field关联字段Varchar(30)如“客户名称”字段Default_Value默认值Varchar(30)表格3.1 Sys_Field表结构操作某用户表所需要提交的字段记录在Sys_Field表中,提交的具体数据才是来自于视图。函数Function GetMetaData(ATableName)用于查询Sys_Field表,返回Table_Name字段等于ATableName的所有记录。即通过调用GetMetaData方法,可获得用户表AtableName所有字段的信息。函数Function GetBillData(ATableName, MetaData)用于根据表名和元数据获得提交页面上的控件值数组并返回。在对某用户表进行新增或更新操作时,所需提交的字段仅依赖于GetMetaData方法对该用户表的查询,而不依赖于提交的页面。提交页面的值要通过GetBillData方法获得。防止了数据模型对视图的绝对依赖。GetMetaData与GetBillData方法封装于Bill_Insert与Bill_Update方法中。Bill_View方法属于View模块,负责解释数据模型并显示给用户,因此封装于Model模块中,当Model状态改变时调用Bill_View,实现Model改变时同步改变视图的功能。Model模块须扩展到为查询列表页面提供数据模型。查询列表页面的数据模型实现是通过封装于过程Write_CheckField_List的AddSearchCondition_Plus方法形成完整的sql查询语句,该sql查询语句的执行结果集即可作为查询列表页面的数据模型。 View模块的构成函数Function Bill_View(ATableName, ID) 实现处理明细关联页面的View模块的功能。View模块需要对Model数据模型进行解释,即实现将用户表数据导入视图。关键在于用户表字段与页面控件的对应关系。因此要求对页面控件的命名格式要规范,以求能与用户表具体字段联系。控件的命名规则为:本表的字段对应的控件名字为OG_FieldName,外表的字段对应的控件名字为CF_FieldName(对应外表名可通过查询Sys_Field表CF_Table字段获得),其中“FieldName”为对应的字段名。如此建立起对应关系,显示时将FieldName字段的值导入名为OG_FieldName或CF_FieldName的控件即可。View模块对Model数据模型的解释,还需要解决下拉框控件的问题。下拉框控件对应的用户表字段的数据类型一般为TinyInt,而页面显示时要求显示为文本信息。因此在数据库建立系统表Sys_Flag作为数据字典,记录某数值对应的文本信息。Sys_Flag表结构如表3.2所示:表英文名Sys_Flag表中文名数据字段定义描 述主 键 ID 字段英文名中文名类型非空描述IDIDIntY主键Table_Name字段所在表名Varchar(30)YField_Name字段名Varchar(30)YField_Value标志位值TinyIntYMeaning标识位含意Varchar(30)Y对应的文本信息表格3.2 Sys_Flag表结构使用Function GetFlagMeaning(FieldName, TableName, FieldValue)方法,可获取表TableName的FieldName字段值为FieldValue时,对应的Meaning值。某表某个字段名是否在Sys_Flag表出现,还可以通过GetMetaData方法,查询该表该字段名对应的Is_Flag字段值,1代表出现,0代表未出现。明细关联页面的状态有“查看”“编辑”“新增”“删除”。其中“删除”状态不需显示页面,所以视图可分为三类:查看视图,编辑视图,新增视图。“新增”状态不要求对控件赋值。因此Bill_View真正需要处理的就是“查看”和“编辑”状态。“查看”和“编辑”状态显示的主要区别是:1“查看”状态要求控件不可编辑,且下拉列表控件转化为控件值相等的文本控件。2“编辑”状态要求不显示关联域。3“查看”状态要求明细域下有“编辑”“删除”“返回”按钮。“编辑”状态为“保存”“返回”。Bill_View方法通过控件命名规则建立页面控件与数据表字段的对应关系,在借助Sys_Field与SysFlag表的辅助,将数据模型正确的解释并将值传递给页面控件。再根据状态的不同显示不同的效果。View模块须扩展到为查询列表页面动态显示列表域。其实现是通过封装于过程Write_CheckField_List的Write_List方法。Write_List方法的显示是基于Model模块数据模型的。 Controller模块的构成Controller模块管理明细关联页面中明细页底部按钮的生成,页面跳转方向以及修改页面状态。明细关联页面的Controller模块功能是通过Function Bill_Controler(List_Page)方法实现的。List_Page可以是一个asp文件名,也可以是多个文件名用|分隔开。用于指定操作完成的返回界面。Bill_Controler根据页面的当前状态,在客户端动态生成相应的按钮。当用于按下按钮时,相应改变页面状态。当用户操作完毕或点击“返回”按钮时,跳转至正确的页面。Bill_Controler通过改变明细关联页面状态(Method_Call),实现控制器对视图选择的功能。Controller模块功能向查询列表页面的扩展,是通过Write_List方法中对列表域双击事件的脚本编写实现的。使得在列表域双击某条记录时,能跳转到相应的明细关联页面,并且将状态置为“View”。 MVC整体处理流程以“编辑”状态的明细关联页面,点击“保存”按钮后处理流程为例说明。当前为编辑视图。1调用Bill_Controller方法,将页面的“EDIT”状态修改为“EDIT_SAVE”,并指定操作结束返回状态为“VIEW”的页面.2调用Bill_Model方法,提交当前页面,根据页面状态“EDIT_SAVE”,调用Bill_Update方法,更新数据库。3根据Bill_Controller方法的设定,返回“VIEW”状态的页面。4调用Bill_Model方法,根据页面状态“VIEW”,调用Bill_View方法,从数据库中读取数据,填充页面当前变为查看视图。如图3.8所示编辑视图“EDIT” View控制器Controller模型Model查看视图“VIEW” View点击“保存”按钮状态改变为“EDIT_SAVE”选择查看视图Bill_View填充视图图表3.8 MVC处理流程示例3.3 可扩展部分设计系统核心库将大量的通用方法封装起来,仅提供少量的接口供用户调用。此种做法屏蔽了复杂的内部处理流程,优点就是方便实际页面的编写。由此产生一个缺点就是降低了功能的灵活性,即某些具体页面要求实现一些比较特殊的功能难以加入处理流程中。因此需要在系统核心库内留下可扩展接口。可扩展接口可以使用错误处理及函数回调的方法实现。以扩展数据有效性验证方法为例:数据有效性验证是通过在过程WriteClientCheck(附录)中的JavaScript: confirmForm()实现的,在confirmForm函数体内添加如下三行代码:tryreturn otherConfirm(); /回调客户端特殊检查动作 catch(e)即留下一个可扩展的接口。JavaScript: otherConfirm()的定义是可选择的,因为有catch语句的存在,otherConfirm函数的定义与否不会影响整个流程。具体页面内定义otherConfirm函数,即可实现对数据有效性验证的扩展。再以扩展更新数据库方法为例:更新数据库的操作在Bill_Model方法中调用Bill_Update方法。如果有特殊的功能需求,要求在更新本表的同时,执行另外一些操作。可以在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论