白维维,王 萍,兰 帆,时 进
(河海大学物联网工程学院,江苏 常州 213022)
在国内外大型综合性体育赛事中竞赛信息系统已经成为与赛事密不可分的组成部分,而竞赛成绩处理系统是联系竞赛信息系统各个环节的纽带和核心。跳水竞赛成绩处理系统主要任务有:完成各种基础数据的录入工作;竞赛日程编排,出场序编排,按照竞赛规则对竞赛数据进行处理;生成,打印,分发报表。基于运动会比赛的不可重复性、内容多变性、严格的实时性要求等特点,该系统根据跳水特点,基于软件设计中面向对象思想,综合应用三层软件体系架构设计整个成绩处理系统。采用三层体系结构,将系统的显示、业务逻辑和存储分层处理,降低层与层间的依赖性,使之具有分布性强、维护方便、开发简单且共享性强、总体成本低等特点。本系统已通过了中华人民共和国第十二届全运会符合性测试,满足竞赛需求。
为满足竞赛需求,配合比赛,竞赛成绩系统主要包括以下几个功能:基础信息管理,对赛会信息,场馆信息,竞赛项目等信息进行管理;裁判信息管理,对裁判基础信息,裁判分工任务,裁判抽签情况等进行管理;报名报项管理,对代表团、运动员及其报项信息进行管理;赛事编排,对运动员的出场顺序等信息进行抽签编排;成绩综合处理,对从数据采集端发送过来的成绩数据进行处理,并能手动或自动排名,晋级等,遇到同名情况还可以进行相关处理,如加赛。
跳水竞赛成绩处理系统软件功能结构如图1所示。
图1 跳水竞赛成绩处理系统软件功能结构图
根据竞赛需求,跳水业务流程如下:
在比赛开始前,需要先从中央成绩处理系统接受运动员报名报项系统的运动员报名报项数据,并对这些报名报项数据进行管理,根据竞赛规则、参赛代表团、参赛与报项人数进行赛事编排。
在比赛进行时,采集并接收前端数据采集系统的成绩数据,或手工录入现场比赛成绩数据,进行排名,晋级等成绩处理以及特殊情况的处理。并且能实时提供现场竞赛成绩信息给电视字幕、现场显示系统等。
在比赛结束后,及时发布现场竞赛信息与报表至数据中心,通过Internet发布到官方网站上。
跳水竞赛成绩处理系统功能模块如图2所示。
图2 跳水竞赛成绩处理系统功能模块图
跳水竞赛成绩处理系统是整个竞赛信息系统数据信息综合处理的中枢,它不仅需要为现场成绩处理和现场竞赛提供组织与管理服务,还要通过现场显示服务系统为现场观众服务。除此之外还要为电视转播以及其他更为广泛的信息发布系统提供数据接口服务。
跳水竞赛成绩处理系统涉及到大量的数据处理操作,包括对内部拥有的数据进行维护,对从计时记分系统获取的数据进行解析,对产生的晋级、名次和奖牌数据等进行上传,以及对以上数据的存储等。这些业务十分复杂,各自的逻辑都紧紧纠缠在一起,彼此间相互依赖,哪一部分都是不可替换的。但业务逻辑依赖于竞赛规程,常常会改变,一旦改变,则要改变多个业务逻辑的设计,如果设计不好,会影响到系统的功能扩展、维护和系统重用。
为解决这些问题,考虑采用三层体系结构,将系统显示,业务逻辑和存储分层处理,降低层与层间的依赖性,既可以保证未来良好的可扩展性,在复用性上也是优势明显。每个功能模块一旦定义好统一的接口,就可以被各个模块所调用,而不是为相同的功能进行重复开发。
在业务逻辑的设计上,考虑到由于大量的重复性操作,设计专门的数据访问服务件来简化同意类型的操作,减少相同或相似业务逻辑对数据库访问的重复代码编写;竞赛成绩处理系统的业务逻辑也不复杂,包括维护、解析、下发和存储。但由于涉及到的数据量大,因此针对这些业务逻辑在设计业务类时需要竟可能设计小而简单的类,避免类中包含过多的属性,并简化各业务类之间的关系,即遵循“高内聚低耦合”的设计准则[1]。竞赛成绩处理系统的功能模块较多,业务量也比较大,在软件界面设计时需要针对各功能模块设计形式简洁、层次清晰的窗体,以减少成绩处理操作员的误操作。
跳水竞赛成绩处理系统软件设计采用三层体系架构,即针对跳水竞赛成绩处理系统实现进行数据访问层、业务逻辑层和表示层的设计。
数据访问层设计使用.NET平台下Ado.Net数据库访问技术完成数据访问服务组件TAPP[2]。该组件提供给应用程序用于数据库连接,执行查询语句或执行过程,检索结果等数据库操作所需要的类和接口。业务逻辑层通过调用这些类和接口可以直接实现对数据库的读写操作。后台数据是竞赛系统的宝贵财产,安全性是一个非常重要的问题。三层结构将业务逻辑数据通过中间层和客户分离,保障了业务数据的安全性[3]。
业务逻辑层主要设计实现对比赛基础数据、,报名报项数据等的维护,对排名奖牌数据等的现实,以及比赛安排数据,赛时数据等的对外交换等。其中对数据维护的实现是建立在数据库访问的基础上,完成数据的添加,删除,修改等操作;对数据显示的实现也是建立在数据库访问的基础上,通过预定义的控制操作完成;对外数据交换的实现则通过数据的接口在双方约定接口协议下完成。
表示层的设计目标是针对各业务功能在系统主窗口下进行对应的义务功能窗口人机交互界面设计。在窗体形式、操作命令层次等细节上进行详细的设计,以富有观赏性和操作性的人机交互界面满足系统的设计需求。
采用三层体系结构,将跳水竞赛业务逻辑和数据的存储显示等访问操作分离,极大地提高了系统灵活性,实现低耦合[4],所有的业务模块都将独立,遇到不同的比赛、竞赛需求的改变,不必对系统结构进行改动,只需对所影响的业务逻辑进行改变,不会对其他功能模块产生影响,便于项目的二次开发。
本设计中使用的三层体系架构如图3所示。
图3 三层体系架构
基于以上研究,跳水竞赛成绩处理系统的软件设计在三层体系架构下,各功能模块的应用包括:
(1)数据访问层应用
首先,根据业务需求,编写具体的数据访问公共服务类,包括数据库增、删、改、查等功能的TDB类。TDB类中提供了一种根据业务需求从数据井里面一层层提取所需数据、减少业务逻辑层重复数据筛选工作。接着,创建一个组件类,在组件类里,创建应用程序对象,这样在表示层进行具体操作时,可以通过这个对象来实现这些数据访问公共服务类所完成的功能。
(2)业务逻辑层应用
根据跳水项目的业务逻辑,编写具体的跳水业务逻辑类,如报名报项类 TRegcomp、成绩处理类TRegCompResult,TJumpResult,TRoundResult。TJumpResult类里面包含了跳水运动员每一跳成绩的计算和排名方法及其相关操作,而TRoundResult类里面则包含了每一轮成绩所相关的业务逻辑处理方法。在基础数据方面,则根据业务逻辑创建TAthlete,TDelegation,TRound,TSportItem 类。这些类都对应了数据库中一张具体的数据表,所以,在编写类时,首先根据数据表中的字段定义类成员变量,然后根据数据访问层返回的信息,构造类对象,并且把新构造的类添加到一个全局List对象中,方便程序的数据操作。
(3)表示层应用
首先,由基类Office2007Form创建软件主窗体MainForm,设置窗口标题等信息,加载各功能模块界面和功能按钮。接着,由TInfo基类创建各功能模块业务类,包括由基类创建基础数据模块业务类、报名报项业务类、赛事计划业务类、赛事成绩管理业务类和报表管理模块业务类,编写构造函数和一次性初始化函数 Override Doinit()。然后,针对各功能模块创建业务主窗口,即赛事计划主窗体、运动员信息主窗体、代表团信息主窗体、报名报项主窗体、赛事管理主窗体、赛事报表主窗体,并设置各自窗体的控件。在各功能模块业务主窗体代码中重载主窗体初始化函数。在主窗体Load事件中加载各功能模块业务类对象,在各对象按钮中激活业务对象主窗体。然后在各功能模块业务类中编写各功能模块的业务函数。业务函数与界面对象无关,数据依靠参数进行传递与交换,通常是数据库读写、排名、排序、判罚等操作。完成数据读写后,通常要进行业务数据集的刷新操作。完成业务数据函数编写后,在各业务功能模块窗口中创建业务处理窗口,设置好所需的窗口控件。编写业务处理窗口代码。业务窗口的驱动代码在业务类中完成,主要包括创建业务窗口对象实例,设置业务窗口模式,设置业务处理窗口的DataView对象,调用业务处理窗体的DoReFresh()方法等。在业务主窗体中通过调用业务窗体驱动函数或编写业务处理代码实现各功能模块的业务功能。
跳水竞赛成绩处理系统软件设计流程如图4所示。
图4 跳水竞赛成绩处理系统软件流程
跳水竞赛成绩处理系统软件主界面如图5所示。
图5 跳水竞赛成绩处理系统软件主界面
根据目前体育竞赛信息系统现状,针对跳水比赛需要,提出了跳水竞赛成绩处理信息系统的设计方案。该方案在软件体系设计上采用三层体系架构,将跳水竞赛业务逻辑和数据存储显示等访问操作分离,极大地提高了系统的灵活性。根据系统实际需要,进行了数据库设计,并根据业务分类,方便了操作及赛事实时成绩的存取,完全满足竞赛需求。
[1]殷泰晖.C#编程从基础到实践[J].北京:电子工业出版社,2007,6.
[2]李红芹.基于三层架构的.NET数据库业务系统开发[J].计算机与现代化,2009(10):120 -125.
[3]赵明亮.浅谈三层架构[J].科学与财富,2011(7):224-224.
[4]汤永华.基于三层体系架构的图纸分发管理系统的开发[J].梅山科技,2009(6):18-23.