客户端开发杂记
记录并介绍一下在.net客户端项目开发中的一些琐碎东西,也许会有人有点用或者有点同感。
一个项目,架构为服务端基于JAVA开发的WEBSERVICE,客户端使用.NET 技术开发,由于在设计客户端时,公司的领导提出要求希望未来能做成可扩展的并且可以给第三方的提供接口的可扩展的客户端,而当时在各种因素下,不能采用WPF进行开发,所以只能做成WINFORM形式的,并且考虑到为了给第三方留口子,所以使用了MAF。
然后关于系统本身由于保密条款所限,不能讲太多业务上的东西。
1.本地数据 由于系统大量数据是放在ORACLE的,所以对于我们客户端来说,本地只需要存放少量的比对数据即可,当时采用了sqlite作为本地小数据库。并且,本地数据需要做到定时清理。对于sqlite的数据操作,网上一大把,具体不用详述。
2.数据传输 之前博文里有,由于数据量是非常的大,举例来说,之前我们的甲方的一个部门又上了个新系统,采购一家在业内属于该业务龙头地位的国外大型跨国公司的产品,和我们具有相同功能的模块,就是由于数据量大,导致甲方的网络瘫痪,最后老外强调,是甲方的网络不行,不支持千兆以上的。。。。但实际上,他们业务部门用的全是我开发的系统,至今都是,所以这点我们可以自豪。当然,我们的系统还是可以更优化,同时向老外学习一些的。我们首先在数据传输上进行了压缩。其次尽量减少在xml中的一些无意义的编码(这点目前在新版的设计中已经改了,xml还是太大)。
3.由于采用了MAF的形式,那么对于客户端的窗体考虑到业务需求,我们采用了weifengluo的那个dock,并且修改了其中一些bug以及自行调整了一下。
4.整个系统中最重要的模块其实是一个列表窗口。并且是一个只读的列表窗口。首先列表的字段是可以设置的,当然这并没有什么。这个列表的特点是数据多,要求能根据某特定查询条件多开。并且操作方便,支持全键盘。因为原来使用这个窗口的业务人员,他们的业务工作相当繁忙,并且,不太会操作鼠标,以及原来很多都是玩类似dos的这种窗口的系统。同时这个窗口需要30秒刷新一次。并且对于这次刷新和上一次的数据如果有不同,需要通过颜色来显示。同时,又不能让当前使用的人感受到刷新了,也就是不能跳屏。对于全键盘操作,其实这就简单了,截获键盘输入,然后进行一些处理。
贴点代码图
![](https://images2015.cnblogs.com/blog/274/201508/274-20150826092828656-945728379.png)
![](https://images2015.cnblogs.com/blog/274/201508/274-20150826092844578-1153238308.png)
然后是数据的更新和比对问题。
数据的更新那就是比较简单了,在子线程里跑,然后处理完了丢到主线程里更新界面。需要提一下的是,当每打开一个窗口的时候,会把这个窗口对于的查询条件的数据请求丢到一个观察者里,然后当数据发生更新后,通知宿主进行处理。
![](https://images2015.cnblogs.com/blog/274/201508/274-20150826092853594-390663405.png)
![](https://images2015.cnblogs.com/blog/274/201508/274-20150826092902234-1956456015.png)
![](https://images2015.cnblogs.com/blog/274/201508/274-20150826092932969-2082779742.png)
![](https://images2015.cnblogs.com/blog/274/201508/274-20150826093005265-387910206.png)
![](https://images2015.cnblogs.com/blog/274/201508/274-20150826093027015-878049399.png)
![](https://images2015.cnblogs.com/blog/274/201508/274-20150826093045422-1348170739.png)
当每次数据变化后通知宿主
![](https://images2015.cnblogs.com/blog/274/201508/274-20150826093055672-409611842.png)
对于界面上的操作,
![](https://images2015.cnblogs.com/blog/274/201508/274-20150826093107047-27842828.png)
对于界面的操作必须要同步进行
![](https://images2015.cnblogs.com/blog/274/201508/274-20150826093128828-1820062149.png)
![](https://images2015.cnblogs.com/blog/274/201508/274-20150826093136125-74546070.png)
对于界面上一些操作,差不多这些应该能说明点问题吧。
还有项目中有个甘特图,我就不截图了,直接改的别人家的控件,难度是相当的大,功能也是相当的强大。记得以前截图和司徒正美的网页版的甘特比较过,嘿嘿。
做这个老版本的系统就2个人写客户端,那是相当的累啊。现在新版本的系统已经在开发了,虽然人多了,可惜原来另一个小伙伴已经不在了,唉神伤。新版本的是WPF的,会更好,更强。