菜鸟第一次做产品小结

来源:互联网 发布:中原地产成交数据 编辑:程序博客网 时间:2024/04/30 03:47

引言:

       历时一个月,应客户要求,针对我司开发的停车场系统做一套车牌识别监控辅助程序,以便管理端更好的掌握车辆的出入情况,监控车辆出入信息,保存履历以便日后需要。

 

结合系统,经过多方测试,目前程序以满足需求,现个人做一个简单小结,以便日后回顾。

                  先对该系统做个整体介绍,该系统历时开发两年(由于途中停滞过),目前已投入运。该系统由精算机和管理机两个子系统组成,终端为精算机,服务器端为管理机,结合各种硬件设备及我开发的监控辅助程序,对出入车辆做到全方位监控,万无一失。

 

因为该系统不是本人开发,但介于目前有新项目类似该系统,领导分配将系统修改(该系统之前代码杂乱无章,条理性,模块性太差),并将代码重新优化,细分模块(之前系统功能太多,新项目有变化),做成单独的DLL,方便以后复用。

 

本人是做Java的,第一次接触CSharp系统,有点茫然,很多知识点一问三不知,特别是来后在修改source时对委托,事件,线程锁,文件序列化,HashTbale存储性能,队列,内存地址分配等等一些知识,非常的茫然,不过在老大的细心调教下,加上我的不耻下问,总算对一些知识点有个大体认知,虽然不是很明了,但总体我感觉自己有很大收获。

 

通过一周的熟悉,对Csharp语言有个整体认识(因为之前学过C#,嘿嘿),便开始对source重新分离。分离原则:设备,通信,数据。我的拆分原则:共同模块(常量,系统设定,共同函数),设备控制器(具体设备控制),具体设备(打印机,客显,摄像头)。

每一层都为单独的DLL类库,共同为系统的主要模块,分别引用控制器及具体设备,对其惊操作和设定。特别是具体设备,不依赖任何外部引用。控制器引用设备,对UI提供数据。

 

硬件方面:因为系统设计通讯及硬件方面知识较多及,且本人对硬件知识处于文盲,暂且对系统连接硬件方面不做过多解释,只是将涉及到的硬件一笔带过。具体的设备包括;IO板,各种打印机,LED客显屏,摄像头,磁卡机,声音播放器,Canbus通信等等。

 

软件方面:采用Csharp语言,WinForm程序,多线程开发,程序中,委托,事件,线程锁较多,一些通信,硬件设定没研究过,但大体了解。程序代码耦合度较高,不易维护,目前代码以拆分,模块性,代码健壮性大大提升。

 

以上是针对这套我拆分的系统进行自我小结,因为只是对代码大体流程进行拆分,对代码具体实现并未过多研究,目前拆分后的系统有待测试,后续我会对系统本身内部深入研究

 

开始我的文件监控辅助程序,简单介绍一下,该程序是针对车牌进行监控的一套完整辅助程序。项目开始:了解需求,开始着手编写详细设计书,在老大的批评指正下,一步步的按开发流程井井有条的进行着。途中,详细设计是最重要的一步,特别是写设计书,对于我这种文科垫底的,语言组织能力差的人,确实是一大挑战。从没有任何思路,在老大的一步步指导下,到对整个程序流程的整体认知,设计书也是越写脑子越清楚,语言组织也是越来越简明扼要,抓住重点,争取到文字如代码的程序,总之一句,越详细越好。

 

 

设计完成,开始进入编码阶段,这个阶段,虽然是设计完成,但程序中因为引入外部的第三方技术。真正编码的时候,也出现过一些设计中没有考虑到的意外情况。如,在识别车牌程序里,每一个jpg文件中处理之前将其转为buffer数组进行解码,通过第三方识别算法进行解析,但在测试的时候,如果段时间处理大批量文件,故导致其识别程序出现异常。原因是其不能及时动态分配内存地址,因为时间差太短,而其内部又是调用系统内存,当系统内存不足,然而此刻必须为该文件分配内存,会导致程序给该文件只分配内存引用,而非具体的内存地址。

 

程序中许多技术点,都是老大帮助我解决的,印象比较深刻的几点:文件被另一进程使用,线程锁,批量文件存入队列,线程下的timer对象的回调函数定时调用执行方法,HashTable在内存中的存储方式,这点收获非常大。简单提一下:C#中的HashTable,以键值对方是存储,每一个key在内存中都对因一个索引值,这个索引值是系统内部随机定义的,每一个索引又在内存中对应一个“桶”,HashTable就是根据索引去找对应的“桶”,也就是具体的value

所以在处理大批量数据的情况下,Hashtable存储速度慢,但读取速度快,因为它是无序的,这是老大给我讲的,以上是根据自我理解写的,有不妥之处,忘大家指正.

 

测试阶段,这个不多提,因为没多少技术含量,所以你懂的,(主要是这东西不是我测试的,没什么好总结的,嘻嘻),不过连接设备,结合系统中对于设备的设定,这些倒是了解。

 

最大的收获;一个独立于任何系统的辅助程序,也就是所谓的产品。不依赖,不局限于某一系统,这是这个小程序的最大特点。分装成单独的DLL,方便好用,值得信赖,哈哈。

言归真传,在这个程序中,对于我来说,最大的收获是两个字:规范。从开发流程,到项目编码及后期的式样书,每一步都是作为程序员应遵守的规范,这是一个良好的习惯,一个变量名,你可能要思索及秒钟,找个最见名知意的单词去命名,这对于后期维护,它的作用不言而喻。一些后期的维护文档,详细设计,单体测试,操作说明等等,必须要全。

 

项目小结。这是一个简单的小程序,没有所谓高深的技术含量,但我学到的东西,不仅仅是技术,更多的是做产品,你需要转变你的眼光,以客户的眼光去做产品,以细心,负责人的态度去做,不要遗漏任何一个以后可能会导致程序出问题的隐藏bug。开发过程中,总经理也曾多次指导批评过,告诫我做产品,一定要站客户的角度去看你所开发的产品。注意每一个细节,对于客户来说,是一种全新的体验。