软件开发
【摘要】
 
 
 
 
【正文】
基于构件的软件开发,可大大提高软件项目开发中的可重用性,提高软件性能,缩短开发时间,减少开发成本,降低程序错误数量。
2003年,我参加了公司管理信息系统的开发,担任了系统分析是和系统架构师的任务。
随着企业信息话的普及,管理信息系统在企业中已涉及到生产经营、财务、人力资源、决策支持等各个方面,与传统管理相互渗透融合,大大提高了企业管理的有效性和及时性,提高了企业服务客户的方便和快捷。
我在一家上市公司信息中心上班,随着企业所面临的市场环境的复杂多变、行业竞争的加剧及公司规模的不断扩张,公司提出了要在一个平台上实现所有业务的要求,要做到企业资源的统一调度使用。在公司的发展中,各部门和各子公司均有不同的信息化规划,实现了不同的信息化管理系统,这些系统的开发没有统一的标准、没有统一的接口,系统之间无法实现信息共享,浪费了巨大的人力物力。为了从根本上解决公司所面临的问题,公司领导经过多次 决定开发一个统一的管理信息系统平台,实现公司资源的统一调度使用。
随着公司集团化的推进,单纯的C/S架构管理信息系统已经无法满足企业的要求,因此我们选择B/S/S架构,开发工具选择ASP.NET,用IIS6.0发布。整个系统分为三层,数据库层、应用逻辑层、用户界面层,数据库层使用ORACLE数据库,应用逻辑层负责事务处理,使用c#语言编写应用逻辑,用户界面用IE浏览器与用户交互。
我们依据平台的主要功能,在项目开发中,如果按照传统的开发方法,每实现一个功能都要编写同样的代码。为了节省开发时间和提高维护效率,我们把共用代码都做成组件。例如:针对oralce数据库的查询、更新、插入、删除的操作数据库操作通用组件(dataOPERATION.DLL)、用户身份认证和用户类型识别的登录认证检查组件(LOGINCHECK.DLL)、用户操作记录的审计组件(checkOPERATION.DLL)、用户操作错误和系统出错记录及错误返回的错误处理组件(error.DLL)。在数据库连接方面,采用微软的ADO.NET技术,使用ORACLECONNECTONoracle专用连接组件提高访问性能。
在这次开发中,我们主要设计和实现了以下通用组件。
1、  用户管理组件
我们开发了用户管理组件logincheck.DLL进行用户登录认证管理。该组件主要完成两个功能:(1)用户身份认证,根据用户登录时提供的凭据(用户名、密码、随机码)确定用户是否有登录系统的权限。(2)确定用户权限,通过用户的帐号确定用户在系统中的权限,防止用户越权操作。用户在打开每个页面时,通过COOKIEsession对用户权限进行检查,看用户是否真的拥有该页面的打开权限,防止用户通过直接的地址进入页面越权操作,保证应用程序的安全。
该组件有三个接口,每个接口代表组件的某个属性和方法。对用户登录请求作出相应的处理,如果是普通用户则进入业务平台,并根据用户权限对菜单进行ENABLE/DISABLE处理。如果是管理员则进入管理员界面。
2、  数据库操作组件
我们定制了dataopration.DLL进行数据库操作的组件,用于与底层数据库交互,在组件完成以下功能:(1)用于返回用户查询的信息。(2)用于对数据库进行增删改操作。该组件具有多种接口型式,编写程序时可用DATASETDATATABLEDATAROW等多种形式返回结果集。并对查询结果作出判断否成功执行,如果成功则返回信息,如果不成功则调用出错处理模块显示错误信息。由于用户的查询条件及查询域是不确定的,因此采用多种形式传入参数,如直接传入SQL语句,传入存储过程及参数,传入DATASET等多种接口形式,程序执行时,由逻辑层将调用参数传入数据操作层,由数据操作层负责与数据库通讯,并返回多种形式的结果集或执行结果,并调用信息显示组件将结果显示出来。
3)消息显示组件
由于所有的窗口显示大小和显示方式是不一样的,例如显示查询条件的窗口和现实操作是否成功的窗口,因此为了同类信息的显示样式保持一致,给用户一种统一的感觉,我们设计了此组件,所有弹出的窗口均调用此组件的POPWINDOWPOPWINDOWA两个函数,这两个函数只是在大小和外观上有不同,显示方法是一样的,调用时将页面传入函数,由此函数显示,保证了界面风格的统一。
4)错误处理组件
我们开发了error.DLL组件。该组件主要作用是确定错误类集,在catch出错时,输出统一的错误信息,方便用户排错。同时将系统的物理路径隐藏,方式恶意用户通过物理路径攻击服务器。
5)样式表
我们定义了各种显示界面和控件的CSS样式表,主要作用就是在页面上统一文字样式,统一DATAGRID样式,各种菜单、按钮样式颜色,给用户一种统一的界面风格。
在本次开发中,我们首次使用了基于构件的开发方法,但由于经验不足,在开发中也走了不上弯路:(1)我们将所有的构件组织成文档,并加入了详细的说明,但是程序员往往只阅读说明后,就弃之不理,开发时仍然自己编写自己需要的东西,我们得到的不使用构件的理由就是别人开发的程序读不懂或太麻烦。为解决这种问题,我们将构件的采用超链接的方式进行组织,对构件的调用和功能进行详细说明,并将构件的源代码在文档中公开,方便程序员阅读和排错。(2)对构件的修改混乱,出现多个程序员同时修改某个构件以适应自己的应用程序的现象,出现这类现象表明构件的范围和质量还要进一步提高,我们采用加强构件的配置管理的方法,允许程序员修改构件代码,同时要求程序员对修改后的构件代码及时归并到构件库中,对构件的归并由专门的构件管理人员进行归并,构件管理人员首先检查代码,对能够归并到通用方法的函数尽量归并到通用方法,不能归并到通用方法的函数另外写一个方法。
在本次开发中,前期的构件开发与系统开发同时进行,多多少少影响到项目的开发进度,但相信在构件库成型后,应能大大提高公司开发项目的进度。
在项目开发完成后,相比以前的项目,软件质量明显提高,软件维护量相比以前大大减少,非常利于项目的扩展,程序员更专注于项目逻辑的实现。该软件在哦国内公司已顺利使用了3年,目前已进入相对稳定阶段。
我认为在软件系统的复杂性不断增长的情况下,基于构件的开发能有效提高软件质量,积累和固化知识财富,并能有效缩短产品开发周期,提高软件生产效率。