十余年软件开发经历,经验总结和程序一览(涉及Socket、WPF、vc++、CAD、图像、GIS)

本文主要介绍我开发的几款软件产品,大概介绍一下功能。可以让读者了解本人的开发能力,所擅长的方面。有相关开发需求可以联系作者。

本人开发软件多年,从事的行业也多种多样;自然接触了不同的业务,开发了各类软件产品。工作的主线一直是windows下C/S模式软件开发; 最近也开始学习asp.net core。

  软件开发和读书一样,先由厚到薄,再有薄到厚。纯粹的软件理论总是很空洞,让人无法适从。如果没有一定的理论做指导,就像在茫茫大海中航行,很容易迷失方向。理论和实践要不断的互动,相互验证,不断的领悟。通过多年的软件开发,不断的学习总结,本人在理论和实践上都有很大的突破,开发各类软件更加得心应手。

   软件开发需要多种技能,每个人都不可能成为全才,好像也没必要。比较现实的还是“一专多能”。要有自己的优势,同时知识面也不要太窄。国内软件开发大部分是“游击战”,主力软件开发人员很少,开发过程没有固定的章法。软件的成败很大程度上依赖软件开发人员个人能力,个人英雄主义的色彩比较浓。这种开发模式也是有好处的,在某种程度上能减少开发成本。小的软件产品多人开发,并不能提高效率;如果开发人员能力差别大,沟通能力不强,更易造成开发延期。

程序功能点及实现方案

一个好的软件产品体现在各个方面,不能有任何”短板“。一款产品可以分解为多个功能的组合。下面列出软件开发相关的功能点,以及本人应对方案。
1 通信(Socket): TCP、UDP通信已成为业界标准。UDP通信处理起来较为简单,它是面向消息的协议;你发送100个字节的数据,对方也会收到100个字节,而不会把100字节分成两个包来发送。TCP通信是面向数据流的,涉及粘包的处理;在Windows下,实现TCP服务器效率最高的方式就是采用IOCP(完成端口)。实现一个稳定高效的TCP服务器难度非常大。本人根据自己的开发经营,封装了一套非常易于开发的网络库(由c++和c#两个版本),该库完全根据windows API编写,达到了易用性和处理效率的统一。在此库的基础上,又开发了一套应用层协议,开发人员不再用关心底层处理细节,大大提高了工作效率。

2 界面:开发效率最高的就是WPF;虽然有人对WPF有些诟病,认为WPF的一些概念晦涩难解,华而不实。我刚开始接触WPF也经历了几个月的迷茫期。因工作的需要,先后利用WPF开发了多款产品;对WPF有了全面的了解,才理解了微软如此设计WPF的苦衷。WPF设计的目标是实现快速界面开发,同时能满足各个方面的灵活需求。而一些中间件DevExpress,是无法达到WPF的灵活性的。我也用vc++、Winform开发过多款产品;现在,除非特别需求,我都采用WPF开发界面。

3 数据库: 首选mysql。几年前,推荐使用sql server。不过,mysql最近几年发展很快,功能也很强,也易于使用;前端工具workbench界面也很友好;我认为方便性已不属于sql server。c# EF模式使数据库开发难度大大降低,但是我不推荐使用该模式。这种模式封装的太深,对后期处理和优化带来很大的麻烦。本人对数据库连接,封装了一些轻量级的类,能减轻开发的工作量。

4 视频: H264是现在主流压缩格式,解码采用ffmpeg。本人对ffmpeg进一步封装,以便于c#调用。视频解码后,转换为bitmap图片,每秒按需要的帧数贴图,就是视频。如果需要对视频进一步处理,比如显示文字,可以用GDI+。

5 音频: 音频处理分为播放和录音两类。对这些处理,微软提供了一些列函数,称之为Waveform Functions。本人对这些函数做了进一步封装,可以很方便的实现播放和录音功能。

6 GIS:这里所说GIS主要是应用,而不是制作。可以采用GMap控件,该控件可用在winform或wpf项目中。该控件的功能可能不是非常强大,但是扩展性很强。可以方便的实现标注、轨迹回放、测距等操作,并且这些操作都是可以定制的。

7 图像处理:采用WPF或winform。winform就是采用GDI+绘图,GDI+是一种比较老的技术,无法利用新的显卡性能;当有大量绘图操作时,不停的重绘,会导致性能降低。WPF绘图是“保持型”的,只需要绘制一次就行,当图片被遮挡,也不需要重绘。对于图像旋转、抠图、半透明能特效,采用WPF都可以很方便的实现。

本人开发的程序一览

1 WPF开发的CAD文件处理程序

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgsws.html