1、摘要 通过信息化手段进行仓库管理是企业信息化的一个重要组成部分。如何实现一个好的管理信息系统是目前重点研究的对象。在中小企业管理过程中,库存管理一直通过纸笔表格完成,仓库管理系统具有很大的应用前景。而传统的系统架构往往在实际应用中不能恰好满足企业需求,与此同时,敏捷开发日益受到业界的重视。本文将在对中小企业仓库管理系统进行需求分析的基础上,重点阐述系统模块分解、原型设计和多层架构设计这三个在总体设计时需要集中考虑的方面。并积极实践,设计并实现了更利于快速开发的单一功能分层架构。关键字:中小企业仓库管理系统 ,单一功能分层架构AbstractWarehouse management by usi
2、ng information techonologies has been an important part of enterprise informationization. How to realize a well-worked management information system has been the key object of study at present. In the process of Small and Medium-sized Enterprise management, Warehouse management has been being finish
3、ed by filling tables with pens and papers. There is a good application prospect in the development of Warehouse management information system. Regularly, Traditional architectures dont fit the requirement of products in the practical application. At the same time, agile development has been under th
4、e attention of the industry increasingly.On the basis of the requirement analysis of the Warehouse Management Information System for Small and Medium-sized Enterprise, this text mainly covers three parts, including system module decomposition, prototype design and multi-layer architecture design. Af
5、ter active practice, We have designed the multi-layer architecture with single function to meet the actual demand, which has an advantage in agile development.Keywords:Warehouse Management Information System for Small and Medium-sized Enterprise, the multi-layer architecture with single function目录1引
6、言11.1中小企业仓库管理系统的研究意义11.2 C#11.3 Visual Studio 2010和SQL Server 200522 系统分析32.1 可行性分析32.2 需求分析33 模块分解与原型设计83.1 模块化与快速原型83.2 建账管理及其原型设计103.3 保管明细账管理及其原型设计113.4 添加入库信息及其原型设计113.5 管理入库信息及其原型设计133.6 全部材料入库明细表及其原型设计143.7 材料入库分类汇总表及其原型设计153.8 供货单位供货明细表及其原型设计163.9 添加出库信息及其原型设计173.10 管理出库信息及其原型设计193.11 全部材料出库
7、明细表及其原型设计203.12 材料出库分类汇总表及其原型设计213.13 产品材料耗用汇总表及其原型设计224 架构设计244.1 单一功能分层架构的特点244.2 单一功能分层架构的优缺点254.3 单一功能分层架构在本项目中的应用265 数据库设计285.1实体-联系图285.2关系数据模型286 编码风格297 结束语31参考文献321引言1.1中小企业仓库管理系统的研究意义一直以来,在中小企业的仓库管理中,出入库登记一直靠纸笔填表格的方式完成。缺点很多:首先,人力成本较高,需要雇用更多的人力进行仓库管理;其次,手工录入容易出现差错,而且纸质账簿保存时被损坏的风险较高;更值得一提的缺点
8、是,如果想得到一份详细的库存汇总信息,需要统计大量数据,花费大量时间。长期以来,这样的问题阻碍了很多中小生产企业的发展,在计算机信息化高速发展的今天,数据的存储、运算和汇总都可以通过程序自动完成,早已不是那个看着账本敲算盘的旧世纪,也已不是指着表格按计算器的年代。现在的管理信息系统正在中小企业管理中发挥着越来越重要的作用,就仓库管理系统而言,中小企业只需要出入库管理员录入出入库信息,中小企业管理者就可以坐在办公室里,通过电脑屏幕,查看关于库存的各种信息,规划企业发展。这极大地降低了中小企业管理的成本,减少了繁琐的流程,加快了工作效率,而且在一定程度上降低了员工的工作量。由于所有的数据均在系统内
9、流动,只要数据由出入库管理员录入系统,每一步流动都可以记录,这也极大地减少了仓库管理的漏洞。而计算机强大的统计功能,可以在几秒内汇总一年、甚至几年的出入库数据,并可以将结果用图表的形式展示出来,通过一些统计模型,还可以预测未来的发展趋势,为中小企业管理者的决策带来了极大的便利。当前,云计算的迅速发展,使得数据存储可以放在云端,数据运算也可以分布到无数终端上。作为中小企业管理者,完全不必担心数据的丢失,只需要借助先进的技术,进行企业的管理,制定战略决策。本文将在对中小企业仓库管理系统进行需求分析的基础上,重点阐述系统模块分解、原型设计和多层架构设计这三个在总体设计时需要集中考虑的方面。1.2 C
10、#C# 是一种多范式编程语言(multi-paradigm programming language)。包含强类型(strong typing)、命令式(imperative)、声明式(declarative)、函数式(functional)、过程式(procedural)、泛型(generic)、面向对象(object-oriented)和面向组件(component-oriented)等编程范式。它是由微软公司基于.NET平台开发并于2000年6月发布的面向通用语言架构(CLI)的新的编程语言。1C#是由C和C+衍生出来的面向对象的编程语言。它在继承C和C+强大功能的同时去掉了一些复杂特性
11、。C#综合了VB简单的可视化操作和C+的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持而成为.NET开发的首选语言。2由于C+发展了C,Java舍掉C+中较为复杂的特性,并且在C+的基础上增加了更多适合工程开发的机制,而C#又在很大程度上借鉴了Java。所以,不管对于目前可以使用C、C+、Java三者中的哪一门语言的程序员,上手C#的难度都相对较低。因此,在限定工期较短并且团队成员只具备初级开发能力的情况下,C#理应作为开发管理信息系统优先选择的编程语言。1.3 Visual Studio 2010和SQL Server 2005Visual Stud
12、io是微软公司推出的开发环境。是目前最流行的Windows平台应用程序开发环境。Visual Studio 2010版本于2010年4月12日上市,其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。Visual Studio 2010同时带来了 .NET Framework 4.0、Microsoft Visual Studio 2010 CTP( Community Technology Preview-CTP),并且支持开发面向Windows 7的应用程序。除了Microsoft SQL Server,它还支持 IBM DB2和Oracle数据库。3Microsoft SQ
13、L Server 2005 是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供了企业级的数据管理。Microsoft SQL Server 2005数据库引擎为关系型数据和结构化数据提供了更安全可靠的存储功能,可以构建和管理用于业务的高可用和高性能的数据应用程序。4为了获得较新的开发体验,我们选择了Visual Studio 2010,而考虑到数据库平台仅仅用来存储数据,并且高版本的数据库平台较难被低版本的数据库平台兼容,并且团队开发环境使用的操作系统中,Windows XP和Windows7均有涉及,所以我们选择了对目前来说,版本相对较低并可以在Windows7上正常运行的Micr
14、osoft SQL Server 2005。2 系统分析2.1 可行性分析可行性分析的任务是确定系统在技术上能不能实现、做出来的东西用户能不能用以及是否需要太多的资金来实现这个系统。1. 技术可行性: 客户机可以运行Windows XP及以上版本的操作系统,有足够大的硬盘空间存储数据。2. 操作可行性: 可以为出入库管理员进行使用培训,界面十分简洁,提示信息丰富,易用性可以满足使用的要求。3. 经济可行性: 只需要为出入库管理员配置一台电脑,并运行Windows XP及以上版本的操作系统即可。从技术可行性、操作可行性和经济可行性三个角度进行可行性分析,开发这个中小型的仓库管理系统完全可行。2.
15、2 需求分析需求分析的任务是确定系统必须完成的工作,通过对需求文档的分析和建立原型,并不断和用户交流系统的设计方案,可以在一定程度上获得相对准确的用户需求。如果不进行需求分析,直接进行总体设计,我们无法知道到底该设计什么,或者我们设计的东西到底该什么样子。所以,需求分析在软件定义中占有很重要的地位。本系统作为一款中小企业仓库管理系统,主要完成材料出入库管理、账目管理、供货单位管理、产品耗材管理和一些数据汇总报表功能。主要完成以下几个功能: 图2-1 入库单样表A) 添加入库信息1. 需要添加的信息包括:入库单编号、入库日期、供货单位、供货单号、制单人、入库材料类别、入库材料名称、入库材料规格、
16、入库数目、入库金额。2. 可以修改和删除入库信息。B) 管理入库信息1. 可以根据入库单编号、入库日期、供货单位、供货单号中的任意条件组合查询入库单信息。2. 可以更改和删除入库单信息。图2-2 出库单样表C) 添加出库信息1. 需要添加的信息包括:出库单编号、出库日期、领用班组、生产计划号、产品名、经领人、批准人、制单人、出库材料类别、出库材料名称、出库材料规格、出库数目、出库金额。2. 可以更改和删除出库信息。D) 管理出库信息1. 可以根据出库单编号、出库日期、领用班组、生产计划号、产品名中的任意条件组合查询出库单信息。2. 可以更改和删除出库单信息。图2-3 保管明细账样表E) 建账管
17、理1. 从无到有地将库存的初始数据导入数据库,数据包括材料类别、材料名称、材料规格、材料数目、材料金额。F) 保管明细账管理1. 汇总在某一时间段内,某种特定规格的材料的出入库和结存情况,反馈的数据包括日期、入库单编号、入库数量、入库单价、入库金额、出库单编号、出库数量、出库单价、出库金额、结存数量、结存单价、结存金额。图2-4 供货单位供货明细表样表G) 供货单位供货汇总1. 汇总在某一时间段内,某一特定的供货单位的供货情况,反馈的数据包括日期、材料类别、材料名称、材料规格、数目、单价、金额。图2-5 产品材料耗用汇总表样表H) 产品耗材汇总1. 汇总在某一时间段内,某一特定产品消耗材料的情
18、况,反馈的数据包括材料编号、材料类别、材料名称、材料规格、数目、单价、金额。图2-6 全部材料入库明细表样表图2-7 材料入库分类汇总表样表I) 材料入库汇总1. 全部材料入库明细表,汇总在某一时间段内的全部材料入库情况,反馈的数据包括日期、材料类别、材料名称、材料规格、供货单位、数目、单价、金额。2. 材料入库分类汇总表,汇总在某一时间段内,某一特定类别的材料的入库情况,反馈的数据包括日期、材料名称、材料规格、供货单位、数目、单价、金额。图2-8 全部材料出库明细表样表图2-9 材料出库分类汇总表样表J) 材料出库汇总1. 全部材料出库明细表,汇总在某一时间段内的全部材料出库情况,反馈的数据
19、包括日期、生产计划号、产品名、材料类别、材料名称、材料规格、数目、单价、金额。2. 材料出库分类汇总表,汇总在具体某一天的材料出库与产品生产的对应情况,反馈的数据包括材料类别、产品名、对应的出库金额。3 模块分解与原型设计3.1 模块化与快速原型模块化是把系统划分成独立命名且独立访问的模块,每个模块完成一个特定的子功能,把这些模块集成起来,构成目标系统,完成指定的功能以满足用户的需求。模块化使得系统可以为人所管理,便于控制系统行为。如果一个系统仅由一个模块组成,那么它将很难被人理解。所以我们要把复杂的问题分解成许多容易解决的小问题,各个击破,这样原来的问题也就容易解决了。然而,事实证明,过多的
20、模块,划分过细,会极大增加系统的模块数目,导致过大的模块间通信开销,设计模块间接口所需要的工作量也将大量增加。所以,我们应在模块划分与系统功能之间建立联系,使得模块与功能一一对应,或者在可控范围内多个模块与一个功能对应。采用模块化开发方法,可以使系统结构清晰,不仅容易设计,而且容易阅读和理解。并且程序错误会被限定在涉及的模块之中,易于测试和调试,从而提高软件的可靠性。而添加功能只需修改其中的部分模块,增大了程序的可扩展性。只修改最底层代码,就可以让我们的系统运行在不同的数据库系统上,如果修改最上层代码,甚至可以让我们的系统运行在不同的操作系统上,提高了程序的可移植性。因此,我们按照系统需求分析
21、中涉及的功能,将系统划分成如下几个模块:仓库管理系统入库管理与汇总建账管理保管明细账管理出库管理与汇总管理入库信息添加入库信息全部材料入库明细表材料入库分类汇总表供货单位供货明细表产品材料耗用汇总表材料出库分类汇总表全部材料出库明细表管理出库信息添加出库信息图3-1 仓库管理系统模块分解图通过快速原型设计工具,可以迅速建立系统的原型,尽快向用户提供一个直观的目标系统的模型,有利于用户和开发者在目标系统“什么样子”和目标系统“能做什么”这两个的问题上尽可能快地达成共识。因此,可以忽略原型中不损害系统功能和行为的小瑕疵。并且原型容易修改,开发人员可以根据用户的意见迅速修改,构建更符合用户要求的版本
22、,如果仍然存在问题,还可以再修改,不断靠近用户的实际需求。但要避免对无关系统功能和行为上的小瑕疵的不断更改,以免延误软件的开发时间。在本文中,我们使用Pencil作为我们的原型图绘制工具。Pencil是一款开源的原型图绘制工具,效果和手绘基本一致,十分有利于引起用户的视觉关注,增强用户参与系统开发的积极性。图3-2 主窗体原型设计3.2 建账管理及其原型设计A) 添加建账1. 从数据库中读取已有材料类别,根据材料类别,从数据库中读取材料名称,根据材料类别和材料名称读取材料规格。如果是新添加的材料类别、材料名称和材料规格,可以通过“新建类别”按钮、“新建名称”按钮和“新建规格”按钮,添加新的材料
23、类别、新的材料名称和新的材料规格;2. 填写材料数目和材料金额;3. 点击“添加”按钮,读取界面上填写的数据,显示提示信息;4. 传入数据到数据链接层;5. 从数据库中读取添加后的建账数据,计算单价,返回到界面;6. 显示添加的结果。B) 更改建账1. 修改表格中的数目或者金额,点击“更改”按钮,显示提示信息;2. 将新的数据传入数据链接层;3. 更改数据库中对应的数据;4. 从数据库中读取更改后的建账数据,计算单价,返回到界面;5. 显示更改的结果。C) 删除建账1. 选中表格中要删除的数据行,点击“删除”按钮,显示提示信息;2. 将要删除的数据行编号传入数据链接层;3. 删除数据库中对应的
24、数据;4. 从数据库中读取删除后的建账数据,计算单价,返回到界面;5. 显示删除的结果。图3-3 建账管理窗体原型设计3.3 保管明细账管理及其原型设计A) 查看保管明细账1. 从数据库中读取已有材料类别、材料名称和材料规格;2. 选择查询的开始日期和结束日期;3. 点击“查询”按钮;4. 传入查询条件到数据链接层;5. 根据查询条件查询数据库,计算入库单价、出库单价和结存信息,返回到界面;6. 显示查询的结果。B) 导出到Excel1. 点击“导出到Excel”按钮;2. 选择要导出的位置和文件名;3. 按单元格读取表格的数据,拼接xml字符串,填入数据,得到预先确定好规格并填写好数据的电子
25、表格。图3-4 保管明细账窗体原型设计3.4 添加入库信息及其原型设计A) 添加入库基本信息1. 产生入库单编号,获得入库日期;2. 加载已有供货单位。如果是新添加的供货单位,可点击“供货单位”按钮,添加新的供货单位;3. 添加供货单号和制单人;4. 点击“下一步”按钮,传入数据到添加入库详细信息窗体。B) 添加入库详细信息1. 获取从添加入库基本信息中读取的基本信息;2. 从数据库中读取已有材料类别,根据材料类别,从数据库中读取材料名称,根据材料类别和材料名称读取材料规格。如果是新添加的材料类别、材料名称和材料规格,可以通过“新建类别”按钮、“新建名称”按钮和“新建规格”按钮,添加新的材料类
26、别、新的材料名称和新的材料规格;3. 添加材料数目和材料金额;4. 点击“添加”按钮,读取界面上填写的数据,显示提示信息;5. 传入数据到数据链接层;6. 从数据库中读取添加后的建账数据,计算单价,返回到界面;7. 显示添加的结果。C) 修改基本信息1. 点击“修改基本信息”按钮;2. 供货单位、供货单号和制单人变为可编辑状态;3. 修改要修改的基本信息,点击“确定”按钮。D) 更改入库信息1. 修改表格中的数目或者金额,点击“更改”按钮,显示提示信息;2. 将新的数据传入数据链接层;3. 更改数据库中对应的数据;4. 从数据库中读取更改后的入库数据,计算单价,返回到界面;5. 显示更改的结果
27、。E) 删除入库信息1. 选中表格中要删除的数据行,点击“删除”按钮,显示提示信息;2. 将要删除的数据行编号传入数据链接层;3. 删除数据库中对应的数据;4. 从数据库中读取删除后的入库数据,计算单价,返回到界面;5. 显示删除的结果。F) 生成入库单1. 点击“生成入库单”按钮;2. 选择要导出的入库单文件的位置和文件名;3. 按单元格读取表格的数据,拼接xml字符串,填入数据,得到预先确定好规格并填写好数据的电子表格。图3-5 添加入库基本信息窗体原型设计图3-6 添加入库详细信息窗体原型设计3.5 管理入库信息及其原型设计A) 查询入库单信息1. 填写查询条件,按照下列查询规则返回查询
28、结果。查询规则:(1) 如果填写了入库单编号,则优先根据入库单编号查询,日期、供货单位、供货单号无效;(2) 如果只填写供货单位或只填写供货单号,则按照供货单位或供货单号,且入库日期在前后三天范围内进行查询;(3) 如果只填写供货单号和供货单位,则按照供货单号、供货单位和日期进行查询;(4) 如果什么也不填入,则显示前后三天的入库记录。2. 传入查询条件到数据链接层;3. 返回查询的入库单结果,返回到界面。B) 更改入库单信息1. 选中要更改的入库单数据行,点击“更改”按钮;2. 跳转到添加入库详细信息窗体,余下操作和添加入库详细信息一致,提交完数据后关闭添加入库详细信息窗体;3. 点击“刷新
29、”按钮;4. 将原查询条件传到数据链接层;5. 查询入库单更改后的结果,返回到界面。C) 删除入库单信息1. 选中表格中要删除的数据行,点击“删除”按钮,显示提示信息;2. 将要删除的数据行编号传入数据链接层;3. 删除数据库中对应的数据;4. 将原查询条件传到数据链接层;5. 查询入库单删除后的结果,返回到界面。图3-7 管理入库信息窗体原型设计3.6 全部材料入库明细表及其原型设计A) 查看全部材料入库明细表1. 选择查询的开始日期和结束日期;2. 点击“查询”按钮;3. 传入日期条件到数据链接层;4. 根据日期条件查询数据库,计算单价,返回到界面;5. 显示查询的结果。B) 导出到Exc
30、el1. 点击“导出到Excel”按钮;2. 选择要导出的位置和文件名;3. 按单元格读取表格的数据,拼接xml字符串,填入数据,得到预先确定好规格并填写好数据的电子表格。图3-8 全部材料入库明细表窗体原型设计3.7 材料入库分类汇总表及其原型设计A) 查看材料入库分类汇总表1. 选择材料类别;2. 选择查询的开始日期和结束日期;3. 点击“查询”按钮;4. 传入查询条件到数据链接层;5. 根据查询条件查询数据库,计算单价,返回到界面;6. 显示查询的结果。B) 导出到Excel1. 点击“导出到Excel”按钮;2. 选择要导出的位置和文件名;3. 按单元格读取表格的数据,拼接xml字符串
31、,填入数据,得到预先确定好规格并填写好数据的电子表格。图3-9 材料入库分类汇总表窗体原型设计3.8 供货单位供货明细表及其原型设计A) 查看供货单位供货明细表1. 选择供货单位;2. 选择查询的开始日期和结束日期;3. 点击“查询”按钮;4. 传入查询条件到数据链接层;5. 根据查询条件查询数据库,计算单价,返回到界面;6. 显示查询的结果。B) 导出到Excel1. 点击“导出到Excel”按钮;2. 选择要导出的位置和文件名;3. 按单元格读取表格的数据,拼接xml字符串,填入数据,得到预先确定好规格并填写好数据的电子表格。图3-10 供货单位供货明细表窗体原型设计3.9 添加出库信息及
32、其原型设计A) 添加出库基本信息1. 产生出库单编号,获得出库日期;2. 添加领用班组、生产计划号、产品名、经领人、批准人和制单人;3. 点击“下一步”按钮,传入数据到添加出库详细信息窗体。B) 添加出库详细信息1. 获取从添加出库基本信息中读取的基本信息;2. 从数据库中读取已有材料类别,根据材料类别,从数据库中读取材料名称,根据材料类别和材料名称读取材料规格。3. 添加材料数目和材料金额;4. 点击“添加”按钮,读取界面上填写的数据,显示提示信息;5. 传入数据到数据链接层;6. 从数据库中读取添加后的出库数据,计算单价,返回到界面;7. 显示添加的结果。C) 修改基本信息1. 点击“修改
33、基本信息”按钮;2. 领用班组、生产计划号、产品名、经领人、批准人和制单人变为可编辑状态;3. 修改要修改的基本信息,点击“确定”按钮。D) 更改出库信息1. 修改表格中的数目或者金额,点击“更改”按钮,显示提示信息;2. 将新的数据传入数据链接层;3. 更改数据库中对应的数据;4. 从数据库中读取更改后的出库数据,计算单价,返回到界面;5. 显示更改的结果。E) 删除出库信息1. 选中表格中要删除的数据行,点击“删除”按钮,显示提示信息;2. 将要删除的数据行编号传入数据链接层;3. 删除数据库中对应的数据;4. 从数据库中读取删除后的出库数据,计算单价,返回到界面;5. 显示删除的结果。F
34、) 生成出库单1. 点击“生成出库单”按钮;2. 选择要导出的出库单文件的位置和文件名;3. 按单元格读取表格的数据,拼接xml字符串,填入数据,得到预先确定好规格并填写好数据的电子表格。图3-11 添加出库基本信息窗体原型设计图3-12 添加出库详细信息窗体原型设计3.10 管理出库信息及其原型设计A) 查询出库单信息1. 填写查询条件,按照下列查询规则返回查询结果。查询规则:(1) 如果填写了出库单编号,则优先根据出库单编号查询,日期、领用班组、生产计划号、产品名均无效。(2) 如果只填写生产计划号,则按照生产计划号且日期在出库日期前后三天范围内进行查询。(3) 如果只填写领用班组,则按照
35、领用班组且在出库日期的前后三天范围内进行查询。(4) 如果只填写产品名,则按照产品名且在出库日期的前后三天范围内进行查询。(5) 如果只填写生产计划号、产品名和领用班组,则按照生产计划号、产品名和领用班组,且在出库日期前后三天范围内进行查询;如果只填写任意两项,则按照所填写的项和日期在出库日期前后三天范围内进行查询。2. 传入查询条件到数据链接层;3. 返回查询的出库单结果,返回到界面。B) 更改出库单信息1. 选中要更改的出库单数据行,点击“更改”按钮;2. 跳转到添加出库详细信息窗体,余下操作和添加出库详细信息一致,提交完数据后关闭添加出库详细信息窗体;3. 点击“刷新”按钮;4. 将原查
36、询条件传到数据链接层;5. 查询出库单更改后的结果,返回到界面。C) 删除出库单信息1. 选中表格中要删除的数据行,点击“删除”按钮,显示提示信息;2. 将要删除的数据行编号传入数据链接层;3. 删除数据库中对应的数据;4. 将原查询条件传到数据链接层;5. 查询出库单删除后的结果,返回到界面。图3-13 管理出库信息窗体原型设计3.11 全部材料出库明细表及其原型设计A) 查看全部材料出库明细表1. 选择查询的开始日期和结束日期;2. 点击“查询”按钮;3. 传入日期条件到数据链接层;4. 根据日期条件查询数据库,计算单价,返回到界面;5. 显示查询的结果。B) 导出到Excel1. 点击“
37、导出到Excel”按钮;2. 选择要导出的位置和文件名;3. 按单元格读取表格的数据,拼接xml字符串,填入数据,得到预先确定好规格并填写好数据的电子表格。图3-14 全部材料出库明细表窗体原型设计3.12 材料出库分类汇总表及其原型设计A) 查看材料出库分类汇总表1. 选择查询日期;2. 点击“查询”按钮;3. 传入日期条件到数据链接层;4. 根据日期条件查询数据库,返回界面;5. 查询所有相关的材料类别,返回界面;6. 查询所有相关的产品,返回界面;7. 根据上述返回的信息,拼接查询结果;8. 显示查询结果。B) 导出到Excel1. 点击“导出到Excel”按钮;2. 选择要导出的位置和
38、文件名;3. 按单元格读取表格的数据,拼接xml字符串,填入数据,得到预先确定好规格并填写好数据的电子表格。图3-15 材料出库分类汇总表窗体原型设计3.13 产品材料耗用汇总表及其原型设计A) 查看产品材料耗用汇总表1. 选择产品名;2. 选择查询的开始日期和结束日期;3. 点击“查询”按钮;4. 传入查询条件到数据链接层;5. 根据查询条件查询数据库,计算单价,返回到界面;6. 显示查询的结果。B) 导出到Excel1. 点击“导出到Excel”按钮;2. 选择要导出的位置和文件名;3. 按单元格读取表格的数据,拼接xml字符串,填入数据,得到预先确定好规格并填写好数据的电子表格。图3-1
39、6 产品材料耗用汇总表窗体原型设计4 架构设计架构设计往往决定了系统开发中后期的进度。一个不好的架构,往往会让项目在后期演变成“边做边设计”,出现很多无谓的修改和时间的浪费。从理论上讲,软件开发应该是分析、设计、编码、测试、维护这五个大体的步骤。但是我们发现,到了测试阶段,发现错误,需要修改的时候,经常会修改设计。这样直接造成了较大的修改工作量,甚至可能使问题越改越多。很多人认为,用户需要什么功能,我们就实现什么功能,没必要花时间去设计软件架构。但当这些人发现,到了项目后期,重构代码几乎等于重写代码的时候,为时已晚。还有些人认为,既有的成熟架构已经很多,我们没必要自己设计,浪费时间,并且容易出
40、问题。但这些人会发现,既有的架构很多时候不是太大,就是太小,团队学习既有架构的过程也会浪费系统开发的时间。良好的架构设计,不仅可以让我们的系统满足用户的需求,而且可以在用户需求改变的时候,我们可以用最小的代价满足用户需求的改变。除此之外,良好的设计架构意味着良好的可移植性、良好的可维护性、较高的开发效率等等。所以我们应该重视架构设计在软件开发中的作用。在本项目中,我们设计并使用了单一功能分层架构。对于传统三层架构中不适合本项目的地方进行了取舍,并加入了我们自己的设计理念。4.1 单一功能分层架构的特点所谓单一功能分层架构,就是把整个项目分解为界面层、业务逻辑层、若干中间数据处理层和数据链接层。
41、(待修改)中间的逻辑层,每一层实现且仅实现一个功能。相比较传统三层架构对数据业务逻辑处理这一略显宽泛含混的作用,我们的架构可以更清晰,并且增强了系统的功能内聚,使得每个模块的功能单一,降低了模块的规模,虽然增加了处理结构的深度,但其规模在可控范围之内。在系统开发过程中,团队分工可以更加明确,由于功能单一,团队成员上手的成本低,每个人仅需要完成若干功能中的一个或几个。下一小节,我们将重点阐述,单一功能分层架构的优缺点。图4-1 单一功能分层架构4.2 单一功能分层架构的优缺点单一功能分层架构的主要优点如下:1) 分工明确,职责划分清晰明确的分工有利于团队成员各尽所能,有利于评价团队成员的贡献,避
42、免利益上的冲突,避免争功,有利于维护团队的稳定。2) 工作内容专一工作内容的专一使得团队成员可以专注于自己的模块,有利于加快项目开发速度,并可培养团队成员的一技之长,甚至多技之长,易产生工作积极性。3) 可移植性、可扩展性好每一层只做一件事情,需要添加处理,就添加新的处理层;需要添加功能,就增加宽度。基本不需要改变太多当前项目的已有成果,便于扩展。而如果换数据库,只需更换数据链接层;换操作系统,只需更换界面层。有较强的可移植性,可以应对各种环境变化。(通过GTK#,在Windows上用C#开发的程序也可以移植到Linux操作系统上)4) 不存在过度设计,简单可靠架构简单,不用花费太多时间在架构
43、学习和架构维护上。模块功能单一,易查错,可测试性好,随之而来的,可维护性好。5) 易上手,对团队成员的能力要求低同样是因为架构简单,对团队成员上手的要求较低,一个小时就足可以适应此架构。团队成员也容易知道自己对整个项目的贡献在什么地方。有利于形成开发热情。6) 功能与文件对应,间接减少了关键路径占用的时间我们假设就一个模块的开发与传统三层架构进行对比:用户界面的开发时间是0.5小时数据链接层的开发是1小时传统三层架构:Model的开发是0.2小时业务逻辑层的开发是3小时(包括错误检验、数据压缩和数据加密.)单一功能分层架构:没有Model业务逻辑层的开发是0.3小时(只是传递参数)错误检验层的
44、开发是0.3小时数据压缩层的开发是0.3小时数据加密层的开发是0.3小时.0.3小时由于传统三层架构需要进行数据库的OR-Mapping和每个函数处理后对Model的封装,这部分时间我们算在了业务逻辑层的开发里。通过上述例子,我们很容易发现,传统三层架构在开发过程中,业务逻辑层由于要完成的处理步骤较多,需要耗费较长的时间,而对于使用Visual Studio的前台开发人员来说,用户界面的开发只需要很短的时间,而对于有熟练数据库经验的人来说,数据链接层的开发也十分简单。只有业务逻辑层,由于不同的模块的逻辑可能不同,需要耗费的时间必然会较其他两层更长。并且,由于开发过程中,一般情况下,一个代码文件
45、不能被两个人同时读写,致使前台开发人员和数据链接层开发人员等待业务逻辑层开发人员的现象时有发生。而在我们的单一功能分层架构中,没有Model,不需要封装,在项目规模较小的情况下,函数接口中的变量数目可以接受,不需要浪费时间在OR-Mapping上。同时,克服了传统三层架构开发过程中的闲置问题,前台开发人员和数据链接层开发人员可以在自身工作完成的情况下,帮助完成处理层的各个模块,团队成员互补,有利于缩短工期。7) 性能优化空间大,关键环节可根据对应平台换用动态链接库。解释型语言,如Python,程序的执行速度相对编译型语言要慢,那么我们可以把中间的处理层用C或C+编译成动态链接库,进行性能优化。划分多个处理层,使得动态链接库的功能和调用可以更清晰明了。8) Simple is better一个架构的简洁对于这个架构的推广十分重要,如果一个架构的使用可以被写成一本将近百页的教材,我想这不是一个好的架构,至少不是一个敏捷开发的架构,也不是一个可以迅速被广