开发《
客户关系管理系统(CRM)
》软件过程,也就是一个标准的Winform程序的开发过程,我们可以通过这个典型的软件开发过程来了解目前的开发思路、开发理念,以及一些必要的高效率手段。本篇随笔主要介绍我在开发这个CRM客户关系管理系统过程中,所用到的一些开发工具,力求从开发工具的层面使大家对这个系统的形成过程有一个大致的了解。

在文章的开篇,我们先来聊几句。一直以来,我都知道,广州这个城市,在图书馆建设方面都做的很好,提供了很多公众的借阅服务,几年前也曾经在区一个小的图书馆里借阅过书籍,不过但是对整个过程没觉得什么特别。上个周末,去了广东省立中山大学图书馆(这个可能是广州最为完善、大型的图书馆)逛了一趟,发现借书的流程真是方便,随着科技工具的引入,一切都非常轻松和高效。曾经在大学年代,也是对图书热爱的年代,找一本书,用替书牌,东找西找找到几本满意的书籍后,拿去登记更是痛苦,排队到自己后,把每本书的借阅栏填好,折到条形码页面,给老师一本本扫描录入。但是那天去了中山大学图书馆,发现藏书很多不说,不用替书牌,找到一摞拿出来后,一并放到一个黑色板上,交上借阅卡,几秒钟就搞定。这一切也是工具引入的效率改进,因此,不管是日常生活,或者是软件的开发过程,以及更多的方方面面,好的工具引入,能给我们提供更快的速度,更高的效率。

言归正传,开发《
客户关系管理系统(CRM)
》软件过程,也用到了很多工具来辅助我们进行高效的软件开发,否则一个软件,可能需要更多的时间,更多的资源,更多的校验排错投入,本文以《
客户关系管理系统(CRM)
》为例,介绍在这个软件开发过程中用到的相关工具和开发思路,希望对大家有一定的借鉴作用。

1、软件的数据库表设计PowerDesigner

我们知道,做任何一件事情,都有一个开始的过程,对于常规的软件工程过程而言,一般开始是需要设计模型、流程等东西的,不过从我自身十多年的开发历程,先做UML的一般不多,而我们往往是通过数据库设计来完善整个模型。数据库设计也有很多工具辅助,不过我觉得使用PowerDesigner就已经很好了,这个设计工具从刚一开始使用,就觉得非常方便实用,所以这么多年也都是以它进行数据库表的设计工作的。

一般我们可以根据需要先在一个数据库类型上设计,如基于SqlServer的,还是Oracle的,或者是其他的,通常用这两种居多。数据库设计过程,可以指定表名称、字段名称(备注作为字段描述)、表之间的关系等方面。

如果我们已经有一些现成的数据库表,那么也可以通过反向工程的方式,把数据库表的设计导入到PowerDesigner上进行管理,也非常方便。

使用PowerDesigner设计的数据库表,非常方便维护,也方便修改,因为我们设计数据库,不可能一下就全部考虑的很好,可能需要多次反复的过程才能最终确定整个表的结构,使用这样的数据库设计工具,能给我们节省更多的修改时间,提高效率。

基于PowerDesigner的数据库设计,我们还可以更改数据库的类型,使之生成其他类型的数据库脚本,PowerDesigner本身也支持很多数据库类型,因此生成的脚本也具有更高的通用性,即使我们变换数据库的时候,数据库类型可能需要一定的调整,但是已经能节省大部分的时间了。

2、数据库工具

在我的《
客户关系管理系统(CRM)
》开发过程中,前期我一直使用SqlServer作为基础的数据库开发,因为它的方便和通用性,因为使用Microsoft SQL Server Management Studio来管理数据库非常方便,比很多数据库可能都方便一些,SqlServer用的人比较多,我也就不再赘述。

当然,我对自己开发的系统,一般都会考虑多种数据库的兼容性,以适应客户自己的部署环境要求,因此同时也会考虑Oracle、Sqlite等不同类型的数据库的兼容。对于Oracle数据库来说,一般都要求使用PLSQL Developer来进行数据库管理,这个工具弥补了Oracle本身的数据库表管理和维护的短板。

对于非常好用的单机版数据库SQLite,我们也需要一些管理工具来管理相关的表,我对比过很多SQLite的管理工具,我觉得SQLite Developer还是最好,使用起来最方便,功能也挺多。虽然一直觉得Sqlite Developer导入SqlServer的表的备注字段的时候有乱码这个问题外,其他都挺好,没有什么其他问题,我在之前有一些文章介绍过这个工具的使用:《
使用SQLite数据库和Access数据库的一些经验总结
》、《
在Winform开发框架中实现对数据库的加密支持
》。

Sqlite的数据库设计,我一般很少进行独立的设计,基本上都是从SqlServer数据库或者其他数据库进行导入,导入后,除了备注类型有乱码外,其他的基本没什么问题,因此用起来也非常方便。一般在我软件绝大多数功能快要完成的时候,就会增加这种数据库类型,然后进行一些功能上的调试。

对于另外一种Access数据库,如非历史原因,基本上可以使用Sqlite来替代它了。

3、代码生成工具Database2Sharp

代码生成工具,是综合体现一个软件开发过程的重要因素,因此选择好的代码生成工具,也意味着整体性的开发思路,以及开发效率方面都应该有所提高,而且尽可能贴近开发的实际要求。 如果基于演示原因或者简单的小软件,使用任何代码生成工具都可以满足要求,但是,实际上,开发一个成熟、稳定、美观的软件,是一个综合的过程,要求处处皆为开发者考虑才能使我们应用起来得心应手。

代码生成工具Database2Sharp(
http://www.iqidi.com/database2sharp.htm
)是我05年的时候开发起来的(之前还开发过一个SharpCode的代码生成工具),这么多年一直完善着、丰富着。坚持以自己为第一用户的原则,尽可能使自己的开发工作得到减轻,效率得到提高,并且综合各种最新的技术,封装好各种基类和继承关系,使得生成的框架代码更少,提供的支持更多,具有更好的扩展性,不用机械式的生成代码。通过全面的整合,可以一键生成一个完整的项目工程代码,生成后直接可以使用VS打开编译。

代码生成工具Database2Sharp本身是基于模板引擎NVelocity的技术,能够更方便调整和扩展,因此能够迅速响应我的开发要求,整合了整个解决解决方案的代码,同时包括了界面层的代码也可以快速生成。

4、基于现成的开发模块

我们做任何事情,都是继承性的,不可能一切都从头来过,我们人类的知识能继续丰富的原因,很大一个原因就是我们是基于原有的知识成果的基础上进行探索,进行研究的。做开发工作也一样,虽然微软给我们提供了很多丰富的.NET 的API,但是我们不可能什么都是从零开始,很多开发是有时间要求的,更有质量要求,基于现成的一些开发模块开发,也成为了我们的必然选择。

我自己本身一直在做软件的开发工作,很大部分都是基于.NET的开发,因此在吸收很多前辈的知识基础上,自己也逐渐积累了很多现成的模块,这些模块经过多个项目的反复利用,反复锤炼,都有着很高的稳定性、通用性,这些模块我在我的随笔分类《
Winform开发框架
》介绍的很多,其中包括了主体的Winform开发框架、通用权限管理系统、通用字典管理模块、Winform分页控件、程序自动更新模块、公用类库、附件管理模块、人员管理模块等等。这些模块组成一个生态体系, 不断的完善着整体的Winform开发框架,同时也为更多的项目应用提供支持,借用我很早的一篇随笔《
Winform开发框架之通用人员信息管理
》中的插图来进行说明。

在我的《
客户关系管理系统(CRM)
》这个系统里面,基本上使用到了上面的所有模块。首先是基于主体Winform开发框架进行各种界面的集成展示,每个模块同时可能有权限的集成,字典数据的使用,附件的管理,公用类库使用更能提高开发的效率,Winfrom分页用于数据的展示模块,使得内容更加合理的展示。

5、集成
开发
环境IDE Visual Studio

和Java的开发标准配置是
Eclipse的IDE
一样,.NET 领域都使用VS(Visual Studio)来进行开发,这个也是一站式的开发平台,我们可以使用它进行代码编辑,界面设计,调试等工作,应该做.NET的没有人不用它的了,这些顺带介绍一下,以突显它的重要性。同时,我们一般也使用VS来进行程序的打包工作,虽然VS2012起,集成使用了InstallShield来进行安装包的制作了,但是目前我还是主要用VS2010,暂不影响。

和VS配套使用,可能有一些类似Resharper的工具来提高开发效率,不过以目前IDE的智能程度,基本上也可以不用其他插件了。

6、代码对比工具Beyond Compare

除了VS这个庞大的IDE工具外,我们很多时候,还需要一些小工具来配合软件的开发。例如,我们开发的代码或者重新生成的代码,需要进行对比合并,那么这个时候 Beyond Compare就会非常好用,我经常性的使用这个工具,配合一些增量的修改工作,可以大大的提高合并的效率,减少出错机会的。

7、常用代码编辑工具EmEditor

代码编辑工具EmEditor也是VS开发工具的有效补充,这款文本编辑器的功能是非常强大的,特别是语法色彩加亮方面,可以支持很多类型的语法加亮显示,同时它又具有很多方便的功能,可以作为一个替换记事本最有潜力的工具了,有了这个工具,你可能再也不太想使用记事本那样低级的文本编辑工具了。

8、代码混淆工具.NET Reactor

在做软件开发的时候,可能会有很多人批评你没有开源,没有共享,其实,对于你花了大量精力,大量心血做出的一个系统,或者即使是一个小软件,都希望得到应有的尊重,而.NET不像C++的那样编译的方式,代码很容易被反编译出来,因此软件代码的混淆和保护就显得非常重要,对公司对个人都一样,除非你自己愿意分享奉献,否则一定的保护措施还是必要的。

用过好多款的代码混淆工具,有微软自带免费的Dotfuscator,也有很多商业收费的,最终觉得还是 .NET Reactor比较好用,方便高效,而且混淆的代码有不错的效果,虽然可能不会100%的安全,但是我觉得这款软件还是非常好的,一直以来都用这个进行一定的程序集保护处理。

9、图片处理工具Photoshop CS

图片的处理是我们需要掌握的一些必要的技能,即使对我们这样非专业的图形处理的程序员,具备一定的图形变换、涂改、修剪、设计工作也很有必要,即使做不出专业图形处理人员那样的效果特技,能够处理一般的图形要求就很不错了,我们在Winform开发过程中,有一些如启动界面,背景图片等,可能都需要经过一定的处理才能使用,那么就可以使用这个强大的图形处理工具Photoshop CS来做一些工作了。

10、虚拟机部署测试VMware Workstation

很多时候,如果你没有在一些干净(没有安装VS等开发工具的环境)系统上测试一款软件,你就不应该发给客户,即使你对它有足够的信心,也很难避免一些意外的情况,最好的措施就是自己先在干净的系统上进行测试,但我们不需要开着几个机器开做这样的事情,用虚拟机足够处理这些工作了。

虚拟机我常用的就是VMware Workstation,我16G的内存+SD硬盘,可以同时快速构建几个虚拟机了,但一般也不需要同时使用几个,同时用一两个足以,简单测试一下,如果正常启动运行,那就减少了很多错误的问题了。

虚拟机可以很方便的复制文件,也可以模拟网络环境,作为一个单独的机器使用,对于我们不常用的Oracle数据库,把它部署到虚拟机,偶尔测试使用,也不失为一个很好的办法的。

虚拟机的软件测试,可以减少一些如引用类库缺少,运行环境支持不够,路径配置错误等问题,我们把一个运行不起来的软件发给客户,而且客户抱怨我们还不知道具体原因是什么,那就显得太不专业了。

标签: none

添加新评论