Winform开发框架之通用附件管理模块

在做Winform项目的时候,一直有一个梦想,就是希望把所有的组件模块组合即可组装成一个完整的项目系统(或者至少可以大部分完成)。这即使是梦想,我也一直为之奋斗,每前进一步,我们离梦想就靠近一步。因此,本着这个梦想,我一路走来,开发整理了一系列的组件模块,包括底层的公用类库、Winform分页控件、通用的适应多数据库的查询组件,以及相对高层次一点的组件模块:通用权限管理系统、通用字典管理模块、通用程序自动更新模块、以及本篇随笔介绍的通用附件管理模块,当然还会有更多的组件模块会吸引我继续朝着梦想前进。除了这些,为了提高开发效率,从设计好的数据库,直接生成项目代码,从05年开始至今,一直完善我的代码自动生成工具Database2Sharp。下面的附图,是我对于目前Winform开发框架以及将来的发展规划,朝着梦想前进,用博客园记录我的前进轨迹以及感想。

本片随笔,还是落地生根,继续介绍我的Winform开发框架中的一环,通用附件管理模块。该模块其实是很通用的一个模块,例如我们的一些日常记录,可能会伴随着有图片、文档等的附件管理,如果为每个业务对象都做一个附件管理,或者每次开发系统都重新做,那么效率肯定没有直接采用通用的附件管理那么方便快捷了。而且在日益增多的项目管理中,我们不需要维护一大堆相同或者类似的代码,而且我的组件都是内置支持多数据库的,对不同的数据库,只需要适当配置即可正常使用,对于组件化的基础性平台以及支持多数据库等方面,特别是项目管理等方面,颇具争议及传奇色彩的园友,吉日嘎拉在文章《分享从带头拼死拼活开发软件项目到不去现场异地坐镇远程遥控照样可以把上海的软件项目管理好》就有很好的阐述,其实他这些总结很实在,有着很好的基础基类(自己构建的或者购买的)总比从头来过的强,术业有专攻,更是厚积薄发积累的体现。

1、多数据库支持模块

我的一贯做法,就是所有的模块,为了应付未知的项目需求,都做成多数据库支持的,虽然看似麻烦了一点,但是由于我提炼的框架,数据库访问类都高度抽象化及完好的封装,因此即使增加多种数据库的支持,其实需要调整的地方极少。

对于上面几种数据库的支持,一般来说,需要增加不同数据库类型的BaseDAL,由于每个不同数据库都需要拥有一个BaseDAL,那么很多相同的操作代码就会发生冗余,因为大多数数据库的基础操作是一样的,只有一部分比较特别,需要进行个性化处理,因此对数据访问层进行优化设计,得到下面的设计图,如下所示。

经过框架抽象,这个BaseDAL类代码很少,基本上通用的数据库操作,已经放到了AbStractBaseDAL超级基类进行封装,即使对于一些不同数据库操作不同,我们也尽可能抽象放到上面基类了,BaseDAL只需要实现一些特殊的操作即可。

2、模块控件化,最大化降低开发工作

为了减少重复开发,要求控件尽可能考虑实际的需求情景。一般来说,我们在数据编辑界面,会有两个需求,一个是管理与数据记录对应的附件列表,一个是维护自己的附件信息,下面对这两个需求进行描述和讲解。

1)管理与数据记录对应的附件列表

首先我们创建一个独立的控件,用于放到编辑数据记录窗口里面,如下所示。

这样在项目中集成(如数据编辑窗口),直接拖动这个控件到界面中,运行就可以看到下面的效果了。

由于一般创建记录的时候,给他指定一个GUID的附件组ID,这样我们在数据记录保存前,我们就可以上传附件了,如下所示。

而且在这个过程中,可以随时查看自己在该记录中已经上传的附件。

如果附件不够,可以随时启动上传操作,附件支持多选文件,然后一次性,启动后台线程操作方式,把文件上传及附件记录保存到数据库,界面如下所示。

2)维护自己的附件信息 

 有时候,我们需要管理自己的个人附件,还需要知道自己在业务模块中上传过哪些附件,这两个是比较常见的场景,这样我们开发一个界面来管理查看这两类附件,就可以满足大多数的要求了,如下所示。

因为个人附件或者业务附件都可能比较多,甚至随着业务的增长,数量可能激增,那么分页就很有必要,如上图下发就是利用我的分页控件模块(纯分页控件模块,不含列表),这个分页控件集合是我博客介绍得比较多的一个控件来的,而且这个是其中之一的纯分页控件,可以适用于所有分页的场景,而不仅仅是用来显示二维表这么简单。当然,这个纯分页控件的使用也是简单易用的,可以用在各种需要分页显示的场合中,这个ListView就是其中之一,还可以用在图片展示等更多场景。

3、集成图片查看控件

由于是附件管理,因此有可能上传各种文件,包括Word文档、Excel文档、压缩文件,以及各种类型的图片,因此为了方便对图片的查看,这个控件集成了图片查看控件,可以非常方便直接读取图片附件的数据流作为对象展示,该图片控件支持对图片的滚动放大缩小、左右翻转、选择放大、图片移动、保存图片等功能,不需要查看,直接使用ESC退出即可。

当然对于其他不是图片的格式附件,由于不知道或者很难直接查看,因此提示用户保存到本地然后提示打开查看即可,如下所示。

4、集成到WCF开发框架中

为了最可能、最大程度的体现系统界面的一致性和应用完备性,我也开发了适用于WCF开发框架的附件上传模块,这样就可以在更多的开发场合上使用,而且由于附件管理模块的集中化,更加方便维护代码了。

其实WCF开发框架模式下的附件管理更有意义,因为如果是纯粹的本地文件管理,可能体现不出网络化的附件管理优势,这样通过WCF的架构,所有的附件数据都可以在各个不同的地方、各个不同的网络环境下进行访问,分布式的优势更加明显,这也是WCF开发框架的相同优势。

以上就是我对附件管理模块的封装,希望朝着WInform业务模块组件化、最终产品高度定制化的理想前进,以最快的速度搭建好最终产品,以高稳定性和统一性的组件界面或者客户的信赖和赞许。

进一步来说,我的模块化的Winform开发框架,对开发业务系统的企业来说,甚至只需要个别人掌握组件代码的维护和更新,让更多的开发人员投入到实际的业务开发或者控件使用的阵营中去即可,既可有效保护产品的安全性和统一性,也可以更高效率的开发一个新系统,而不需要企业什么基础性模块都需要开发人员参与,重新弄出一堆很难统一化的基础性产品来。回应开头的一句话,就是术业有专攻,更是厚积薄发的积累的体现。

本文转自博客园伍华聪的博客,原文链接:Winform开发框架之通用附件管理模块,如需转载请自行联系原博主。

时间: 2024-12-24 20:13:23

Winform开发框架之通用附件管理模块的相关文章

Winform开发框架之通用高级查询模块

最近一直忙于公司的事情,虽然一直在做一些相关的技术研究,但是很久没能静下心来好好写写博客文章了,想想也有半个月之多了,这半个月来,也一直致力于改善我的WInform开发框架,使得自己及客户使用起来更加方便,更加友好,更加高效.本篇文章就是介绍最近框架改善的其中一个闪光点"通用高级查询模块",高级查询模块,在很多程序模块中都很常见,也是给客户扩展查询的一个很好的补充,由于我一直希望我的Winform开发框架能够精益求精,所以做了这个模块,希望对今后我自己所有的项目以及框架本身,都能高效的

Winform开发框架之通用自动更新模块

在网络化的环境中,特别是基于互联网发布的Winform程序,程序的自动更新功能是比较重要的操作,这样可以避免挨个给使用者打电话.发信息通知或者发送软件等,要求其对应用程序进行升级.实现程序的自动更新,在后期发布维护过程中,一个可以快速相应修正相关的Bug或者增加功能,二个可以避免给使用客户隔三差五的发送修改好的程序,省心省力.本文也是基于这个思想,在Winform开发框架中再引入一个自动升级更新的通用模块,这个自动升级的通用模块除了具备一般的功能外,可以通过配置程序标题.升级路径方式等方式,实现

Winform开发框架之通用短信邮件通知模块

在做Winform项目的时候,一直有一个梦想,就是希望把所有的组件模块组合即可组装成一个完整的项目系统(或者至少可以大部分完成).在之前介绍的<Winform开发框架之通用附件管理模块>里面介绍了我的Winform开发框架的版图,里面包含了我对Winform模块化的一系列规划的组件,组件尽可能是适用于大多数的业务环境组合,以达到最大程度的重用和高效开发. Winform开发框架是我集多年开发经验以及积累而成,很多细节之处润物细无声,但却是精粹心得所至,很多地方都希望是精益求精,力求把框架中的模

在附件管理模块中增加对FTP 上传和预览的支持

在之前介绍的附件管理模块里面<Winform开发框架之通用附件管理模块>以及<Winform开发框架之附件管理应用>,介绍了附件的管理功能,通过对数据库记录的处理和文件的管理,实现了附件文件和记录的整合管理,可以运用在单机版的WInform框架,也可以使用在分布式的混合式开发框架中,随着一些开发场景的丰富,我们需要以FTP方式上传文件,因此对这个附件管理模块进行扩展,以便适合更多的实际项目需求. 1.FTP上传.HTTP文件预览实现思路 我们设想的附件管理,底层都是需要在Winfo

Winform开发框架之通用人员信息管理

我在随笔<Winform开发框架之通用短信邮件通知模块>和<Winform开发框架之通用附件管理模块>等多篇文章中都有介绍我总体的一个Winform开发框架的规划,其实就是开发一个集成度高的Winform开发框架,然后尽可能开发一些日常项目用到的模块,我称之为通用模块(可重复利用,或稍微调整可以适应项目需求),这样就形成了一个良好的生态体系,能够极快提高开发效率,同时也能规范化项目产品的开发工作,松耦合的集成能提供更高层的整合和利用.本文主要介绍我的Winform开发框架体系里面的

Winform开发框架之通用人员信息管理实现代码介绍

我在上一篇<Winform开发框架之通用人员信息管理>随笔中介绍了这个通用人员信息管理的大致实现界面和思路,本篇就其中的实现细节做进一步的分析和共享,希望大家对其中的实现代码进行一个了解,并希望多多提出宝贵意见.通用人员信息管理模块,这个模块其实在很多场合都可能用到,如企业员工管理.科室员工管理等等,这些要求登记人员详细资料及图片等信息的系统模块. 1.项目框架布局 以上几个模块分开是为了适应更多的项目需要,如可能用到WCF模块,那么实体类需要独立引用.但是如果是纯粹的Winform模块,以最

Winform开发框架之通用定时服务管理2---如何开发定时服务应用

在上篇随笔<Winform开发框架之通用定时服务管理>介绍了我的框架体系中,通用定时服务管理模块的设计以及一些相关功能的展示.我们在做项目的时候,或多或少需要和其他外部系统或者接口进行数据交互,有些是单向的获取,有些是双向的操作.这个定时操作(可能是间隔的时间,也可以能是定在某一个时刻,也可以能是让它在某天某时刻运行),那么这就需要定时服务程序来管理了,通常我们把他寄宿在Windows服务里面(这也是一种最佳的方式),这种方式最好的地方,就是它的生命周期可以随着电脑的启动而启动,而且很少需要用

Winform开发框架之通用定时服务管理

做项目的时候,或多或少需要和其他外部系统或者接口进行数据交互,有些是单向的获取,有些可能是修改状态后再写回去,不管如何,这个都可以称之为数据同步操作,如人员信息同步.业务数据同步.第三方接口数据同步等等. 数据同步涉及到一个同步时间的问题,一般不敏感的数据,一天或者一周左右同步一次就可以了,有些可能需要间隔更短一点. 同步的逻辑不同,有些可能写数据库就可以了,有些可能需要访问WebService或者其他接口,然后在进行数据获取,保存等操作,回写的时候,也一般是调用WebService这样的接口修

Winform开发框架之通用数据导入导出操作的事务性操作完善

1.通用数据导入导出操作模块回顾 在我的Winfrom开发框架里面,有一个通用的导入模块,它在默默处理这把规范的Excel数据导入到不 同的对象表里面,一直用它来快速完成数据导入的工作.很早在随笔<Winform开发框架之通用数据导入 导出操作>里面就很全面的介绍过它的相关功能了,在代码生成工具Database2Sharp里面,生成的 Winfrom界面代码也已经把它的调用代码放进去了,因此使用起来真是很好,很开心. 在不断的项目实践中,发现使用基于Sqlite的客户端作为单机版的操作也越来越