登陆注册
8724600000037

第37章 软件工程实例——构件库管理系统(1)

8.1项目背景介绍

可复用的软件开发之路将是软件行业发展的主流。所谓软件复用(或软件重用)是指充分利用过去软件开发中积累的成果、知识和经验,去开发新的软件系统,使人们在新系统的开发中着重于解决当前出现的新问题,满足新的需求,从而避免或减少软件开发中的重复劳动。而软件复用的基础就是构件。所谓软件构件(也称软件组件)是软件系统内可标识的、符合某种标准要求的构成成分,类似于传统工业中的零部件。广义上讲,构件可以是需求分析、设计、代码、测试用例、文档或软件开发过程中的其他产品;狭义来说,一般指对外提供一组规约化接口的、符合一定标准的、可替换的软件系统的程序模块。通常情况下是指后者。

常见的构件接口标准包括:微软提出的COM/COM+、SUN公司提出的JavaBean/EJB、OMG提出的Corba、Borland公司提出的VCL、微软与IBM提出的WebService等。

具体的构件可能是一个界面控件,如常见的TextBox控件;也可能是个动态链接库(dll),如常见的用以实现数据库访问,执行命令的ADO组件;当然也可以是一个可执行程序,比如计算器中的小程序;当然还有可能是以WebServeice形式存在的Web服务。随着实验室项目经验不断积累,业已实现各种形式的大量构件,实验室的软件开发也渐渐走上了可复用的软件开发之路。为了有效提高软件的开发速度,迫切需要对已有的构件实行有效的管理,以方便开发新项目时能够做到快速地查找所需的构件,并能方便使用。

后面的内容来自于上海理工大学计算机学院中爱班软件综合课程设计的构件库管理系统小组报告。参加这次课程设计的同学基本上都是第一次分析、设计、编写综合软件,第一次接触.NET平台,第一次综合使用SQL Server、VisualStudio.NET、IS、DreamverWeaver等各类工具,但是在适当的管理和引导之下,同学们在短短两个月左右时间内做出了优秀的作品。在这次课程设计辅导中,强调软件团队开发过程中管理方面的内容,强调分析和设计的过程,并综合应用包括极限编程中的很多有益的思想。对于整个软件开发过程,并不强调文档自身的规范化,也并不重视各种分析、设计、表述的标准化,因为文档本质上只是形式,目的在于促进高效的开发,所以更关心学生总体软件过程的把握,团队协作精神的培养,以及实际解决问题能力的培养。

当然,对于只是大学三年级的同学来说,这样一个综合软件开发任务毕竟是全新的、具有挑战性的任务,要想尽善尽美是不可能的,疏漏之处难免会出现。在后面的文档中,或多或少会有诸多不成熟不完善之处。但它毕竟是一个实际的软件过程。为了让读者认识一个实际的软件过程原貌,完全保留了原有的报告,以供读者品评。

8.2项目规划

8.2.1项目简介

软件复用使人们在软件开发中不必“一切从零开始”,提高了软件生产率和质量,缩短了开发周期,降低了开发成本。软件重用中没有材料的消耗,而且软件通过多次重用后,其质量和可靠性会越来越高。

构件(component)是可复用的软件组成成分,可被用来构造其他软件。软件构件可以是被封装的对象类、类树、一些功能模块、软件框架(framework)、软件构架(或体系结构Architectural)、文档、分析件、设计模式(DesignPattern)等。构件分为构件类和构件实例,通过给出构件类的参数,生成实例,通过实例的组装和控制来构造相应的应用软件。

这不仅大大提高了软件开发者的开发效率,也大大提高了软件的质量。

1.项目的主要技术与平台

ASP.NET

VB.NET

MSSQL Server2000

2.项目实现功能

以WebService形式存在的构件管理系统网站,普通用户可以对构件进行查询,包括对关键字的查询,还可以浏览有关构件的技术文章;管理员可以对构件进行添加和更新,以及对所有类的查询、添加和修改。

3.项目基础的需求

具体功能实现如下。

1)基本信息管理

可以添加构件功能,构件类别,产品类型,操作系统,构件作者,相关项目,开发工具。对其描述和介绍进行修改。

2)构件基本信息管理

添加一个构件,包括构件名称,构件类别,开发工具,产品类型,功能类型,构件简介和功能介绍。并可以对确定版本的构件信息进行修改。

3)构件版本信息管理

添加一个已存在构件的新版本信息,包括构件版本号、构件作者、操作系统、主要技术、先决条件和更新内容,并可以对其信息修改。

4)构件使用信息管理

添加一个构件的使用信息,包括构件的使用方法、使用实例、构件路径和源代码路径。

并可以对已存在的信息进行修改。

5)构件结构信息管理

注册一个构件所含有的类信息。同时在确定的类中添加、修改和删除属性、方法(删除方法时同时删除所有相关参数)、事件、父类和基类,在确定的方法中添加、修改、删除参数信息。

6)构件检索浏览

可以按构件名称、构件项目、构件类别、构件功能、构件作者进行关键字查询。可以按构件功能、构件名称、构件版本的顺序做树形的构件信息浏览检索。

7)类信息的检索浏览

可以查询类的属性、事件、基类、父类、方法及参数。并可以浏览相关的使用说明和实例。

8)用户信息管理

注册管理员信息。

9)相关文章管理和浏览

管理员可以添加和删除构件相关文章,用户可以浏览构件的技术文章。

4.技术难点分析

难点1:注册

数据库中表单之间的关系比较复杂,在构件注册时,所涉及的表单很多,所以需要反复对数据库进行读写操作。与构件直接相关的有基本信息表、版本信息表和用法表三张表,在注册一个新构件时需要依次对三张表插入新记录,而由于基本信息表和版本信息表中均有外键指向与之相关的基本信息表,所以在Page_Load()事件时需要动态绑定数据库中的字段,并写入DropDownList中,来限制用户选择。而在注册构件时,又需将用户所选的选项名与其在数据库中对应的编号写入构件表中。构件的信息量较大,在网页上所用的控件分为TextBox,Label,FileFieldBox(上传)、DropDownList,所以,在写Insert语句时所对应的变量会比较复杂。此外,由于构件编号时需要自动生成,在用户打开注册网页时得到一个新的构件编号。对于用户输入的检查也是注册时的一个难点。

难点2:更新

构件更新是对已存在的构件增加新的版本。用户在打开此网页时需要看到构件基本信息表中对应的构件记录,所以需要在Page_Load()时读出数据库中指定记录相应的字段值。

与注册相同,需要用到多个控件来承载数据,所以编码的难度会增加。

难点3:修改

网页显示的是用户选定的构件记录,所以在加载网页时需要读出三张表单中关于构件的信息,dropdownlist控件既要实现数据库中基本信息动态的绑定,又要在第一条记录中显示指定记录里的值。

难点4:参数互传

在构建TreeView时,会有各节点间的参数互传,而各节点的信息存在于不同的表单中。例如,第一层的“功能”循环,要从tb_Component Function中选出Component Funtion Name字段内容传到第二层的“构件”循环,然后在第二层循环中,要从多张表中才能确定同一功能的构件,并把Component Name字段内容传到第三层的“版本”循环,在第三层中同样要在多张表中寻找关系,确定同一构件名同一版本号的类,把Version ID字段内容传到第四层的“类”循环。如此连接各表单的SELECT语句会比较烦琐,关系也不容易确定,因此需要在多张表单选取所需字段,建立视图。

难点5:计算

建立四层的Tree View需要有四层的FOR循环语句,它的跳出条件应是视图中的记录数,因此要计算功能、构件、版本及类的记录数。

难点6:添加

对TreeView中功能、构件、版本及其叶子节点的添加。

难点7:显示信息内容

在“类信息添加”,“类信息修改”功能的实现上,单击“功能”名、“构件”名、“版本”号时,也要能显示相应的信息内容。

难点8:查询功能的实现

查询功能的实现需要涉及调用数据库表单,由于在一个页面中的数据绑定将涉及许多数据库表单,所以在编码时,SELECT语句将比较烦琐,例如:在构件功能查询时,首先出现的一个列出所有构件功能的列表,此页面将涉及TB_COMPONENTFUNCTION表中的Function Name字段及Function Deion字段,然后键入构件、功能时,将出现一张关于此构件功能的所有构件的网页,它涉及TB_component Basic Infor mation中的Component Name字段及Component Instruction字段。若键入详细信息,将涉及TB_component Basic Information中的字段。对于整个查询功能的编码来说,在调用表单方面将会变得非常复杂和烦琐。

难点9:VB编码的形成

在实现查询数据的显示时运用了DATALIST这个控件,其中涉及了Hyper Link控件数据绑定问题,由于在DATALIST中添加的声明都在HTML语言中,所以对VB编码有一定的困难,无法在VB编码中写HyperLink.NavigateUrl指向哪个网页,并且也无法传参数。

难点10:设置

由于要运用FRAMESET,所以查询部分主要分为上下两个FRAME,本应写在上方FRAME中的关键字查询的搜索按钮选用HYPERLINK,但是HYPERLINK控件没有ON_CLICK()事件,所以要完成该功能需要用TEXTBOX和DROPDOWNLIST两个控件的触发事件来共同完成。然而,若TEXTBOX的触发事件(textbox_TextChanged)要人为完成的话,需要将其AUTOPOSTBACK属性设置为TRUE。但是一旦将AUTOPOSTBACK设置为TRUE时,在运行填写完关键字后就需要先让TEXTBOX失去它的焦点来判断是否输入完毕,要判断是否失去焦点,就要在除TEXTBOX的其他区域上单击一次,然后再按下搜索键。这样的话,在运行时就变成了要按两下搜索键才能完成功能(注:第一次是使TEXTBOX失去焦点,第二次则是正式的运用功能)。

8.2.2项目管理

1.角色分工

2.时间规划

8.3项目分析设计

8.3.1数据库设计

1.ER图

2.表单关系图

3.详细表单定义

1)构件基本信息表——tb_ComponentBasicInformation

2)构件版本信息表——tb_ComponentVersionInformation

3)构件使用信息表——tb_ComponentUsageInformation

4)构件类别表——tb_ComponentCategory

5)开发工具表——tb_Tool

6)产品类型表——tb_ProductType

7)构件功能表——tb_ComponentFunction

8)操作系统表——tb_OperationSystem

9)项目信息表——tb_ProjectInformation

10)构件—项目表——tb_ComponentProject

11)作者表——tb_Author

12)类信息表——tb_ClassInformation

13)类—基类表——tb_ClassBase

14)类—属性表——tb_ClassAttribute

15)类—方法表——tb_ClassMethod

16)类—事件表——tb_ClassEvent

17)参数表——tb_Reference

18)用户表——tb_UserInformation

19)关于构件表——tb_ComponentIntroduction

4.视图定义

1)构件—功能表——view_Function

2)构件—版本表——view_Version

3)构件—项目表——view_Project

4)构件—作者表——view_Creator

5)构件—类别表——view_Category

6)构件—类表——View_Class

7)类—父类表——View_SuperClass

8)类—基类表——View_BaseClass

9)构件下载表——View_Download

8.3.2UML设计

1.USECASEDIAGRAM

用例(USECASENAME):添加结构信息

角色(ACTOR):管理员

描述(DEION):本个案描述管理员添加构件结构信息

同类推荐
  • 成为淘宝创业的超级毕业生

    成为淘宝创业的超级毕业生

    本书讲述如何通过淘宝创业将大学在校生打造成为“超级毕业生”。主要内容包括大学生从事淘宝创业的理论基础、学以致用的操作指南,以及可资借鉴的案例。书中的理念篇可供对创业教育感兴趣的高校教师参考;实战篇提出的“淘宝十二招”,操作简单,易学易用;案例篇讲述了十位成功在校创业大学生的故事,主要供学生参考。读完本书,相信凡是关注大学教育者或希望通过淘宝创业的大学生,皆能从中获得启发,对创业从无心变有心,从有心变行动,亲身投入或参与到这个伟大的事业中来。
  • EDA技术

    EDA技术

    根据课堂教学和实验操作的要求,以提高实际工程设计能力为目的,深入浅出地对EDA技术相关知识作了系统和完整的介绍,相关知识作了系统和完整的介绍。
  • 如何建设网站

    如何建设网站

    本书以问答的方式介绍了建设网站的基本知识,内容包括:网站设计的八个步骤、建设网站需要掌握的工具软件、网页中插入图像、在网页中隐藏内容等。
  • 现代企业财务软件应用教程

    现代企业财务软件应用教程

    本书内容包括财务软件概论、系统管理、企业应用平台、总账管理、报表管理、薪资管理、固定资产管理、应收款管理、应付款管理等。
  • 如何处理电脑故障

    如何处理电脑故障

    本书以问答的方式介绍了电脑会出现的各种故障,内容包括了音箱声音失真,如何处理?如何做好电脑的日常维护等等问题。
热门推荐
  • 学会低调低调是一种人生态度:低调是一种处世谋略

    学会低调低调是一种人生态度:低调是一种处世谋略

    低调做人是职场与交际的秘密武器。职场如战场,社会如染缸,在这个可能是处处危险的环境中,要想保全自己,发展自己,就要先做出一副低调的姿态,让周围的人解除对你的心理防范,揭开他们冰冷的面具。这样做会让他们更有面子,更有尊严,反过来他们会给你更大的面子,更多的尊严。这时,你已经拥有了成功者所必须拥有的关系网,就能左右逢源,无往而不胜了。
  • 我的奇妙世界

    我的奇妙世界

    很多人都有一个自己的生活,各不相同。有的无聊度日,浑浑噩噩;有的事业小成,前途光明;也有的……可能有着旁人所不知道的奇妙。而我就是其中一个,我不知道这是否改变了我的人生,但这是我的一个故事,一个梦幻之旅……一起走进世上那些不为人知的大门……
  • 我的金手指与小天使

    我的金手指与小天使

    出生在经济条件不好的80后,因为有了金手指和随着金手指一起诞生的小天使,他们家的生活从此丰衣足食,小主人从此要风得风要雨得雨,帮助过很多人,可是为了众人的利益,小主人从此失去了金手指和小天使,一时间他们家被打回原型,小主人也遭到了学习上的挫折,可是她没有因此而倒下,她凭着自己坚强的意志考上了大学,并重遇小天使,并成就了美好的恋情。
  • 红尘仙逸

    红尘仙逸

    少年当远行。周怿背着自己亲手斫的琴在十七岁那年悄然下山。下山前,师傅给了他一个琴匣和一个面具。琴匣中有暗层,里面是一把剑。面具看起来很普通,刚好遮住他的脸。师傅对周怿说:“小怿啊,下山一定要记住两件事,一是戴好面具,二是别动琴匣里的剑。不到万不得已,千万不能动这两样东西!”周怿点头答允。于是这世间从此多了一个戴面具的青衣琴仙。
  • 南迦巴瓦的金顶

    南迦巴瓦的金顶

    人类,正在被内心极端的自私吞噬着,世间成为一片苦海。相传,南迦巴瓦的金顶可以指引着“五行者”找到能够净化人类心灵的圣洁灵光。所以,为了拯救人类世界,一项历时千年的浩大工程进入了关键时期.....
  • 都市之神帝驾到

    都市之神帝驾到

    【收藏有惊喜】 《花都巅峰狂少》已完本。谈武道,他可横扫天下!谈血脉,他是大帝唯一子嗣,体内流淌最强血液。谈背景,他是大帝之子,你惹不起……。谈计谋,特么,今天老子又栽了……他是无上战神,又是一个背景恐怖的帝二代。他可冲冠一怒为红颜,也可为兄弟两肋插刀。他的忠诚,却被视为背叛,从此踏上他的逆袭之路……
  • 庸医谷

    庸医谷

    花簟秋前世因为所信非人早逝,谁知死后穿越重生,此生她只想做一个无心、无情的人,自由快乐的过一生。不管老天给她什么剧本,她都只按自己的剧本走
  • 桃李未言

    桃李未言

    她是普通商人之女,常年不得与父亲相聚,幸得有他的陪伴,才让她能体会到除母亲以外的疼爱。他是贵族之后,家中嫡子,从小含着金汤匙出身,却从不嫌弃平常人家,反倒对她多番照顾。都以为他们是两小无猜,青梅竹马,总有一天会喜结连理,可是,当另一个人的出现,打破了一切的原本以为……
  • 乾纲

    乾纲

    乾纲者,天道。如果世间善恶无报,那必定是乾坤有私。前生来世的善恶有轮回执掌,现世的善恶又有谁来裁决?一个卑微的生灵,一步一步,踏着累累白骨,走上至强的神座。如若我证得无上大道,成正觉已,则诸天万界,具足无量不可思议功德庄严,无有奸淫,杀戮,偷盗之类,一切众生,居我神国,受我法化,不复更堕恶,皆成君子,人人如龙!得是愿,乃成道。不得是愿,不取无上正觉!
  • 世界毁灭了所以我在未来等你

    世界毁灭了所以我在未来等你

    这是一个关于救赎的故事,是你对我的救赎,也是我们对于彼此的救赎。世界要毁灭了,我很害怕,却无依无靠,还好,遇见了你,这大概花光了我所有的运气。我愛你,永远愛下去,但是抱歉啊。。。我总是不记得这个带给我欢乐和微笑的女孩,所以,我总得做点什么补偿一下吧,哈哈,笑一个。我从未远去——我在未来等你——