最近忙的项目,估计是我在目前公司的最后一个项目了。我的任务是负责一块接口转换板的程序。实话说这个程序没什么技术含量,纯粹是应用协议的转换和物理接口的转发,完全可以用一个上位机软件代替,由于某些历史原因出现了这个怪异的解决方案。总结一下这个项目的开发过程,主要是在业务抽象、模块化设计、测试驱动和版本管理等方面多积累了点经验。
我所谓的业务抽象其实就是把类似的业务用相同的接口统一起来,通过中间层作为业务需求和业务实现的桥梁。增加中间层的代价是增加运行开销,好处是需求变动时修改容易。针对目前这个接口转换板的设计定位,这样的代价是值得的。而且我不希望单纯为了这个需求写这个程序,最大限度的重用是我设计的原则,这里涉及到模块化设计。
我理解的模块化就是堆积木,一个模块实现一个明确的功能;模块还可以细分,最小粒度的模块实现一个单一的功能;一般用一个.c和.h文件代表一个模块。归因于我设计水平低下,常常在实现的过程中需要增加功能调整接口。有感于以前看的万行文件和千行函数,我现在是新建文件控和新建函数控,工程目录下有很多.c.h对,每个.c基本不超过2千行,每个函数不超过200行,超过一百行的函数很少,主要是uCOS任务函数的消息处理循环。以前那个让我骂街无数次的程序,很大一个问题是如果想从里面拿某个功能出来修改或者移用,会发现像掰莲藕那样,处理那千丝万缕的联系足够头疼了,还不如自己重新写功能。模块化的设计,不只是方便未来维护修改或者重用,其实也提高了当前开发效率,例如实现单元测试,需要比较独立的功能模块。只可惜在急功近利的山寨厂里,不管是什么编程语言,总能看到慢慢变得臃肿的代码。新手们不敢轻易修改,熟手们忙得没时间完善,老手们懒得再去理会。开发就好像是使用一次性餐具ÿ
我所谓的业务抽象其实就是把类似的业务用相同的接口统一起来,通过中间层作为业务需求和业务实现的桥梁。增加中间层的代价是增加运行开销,好处是需求变动时修改容易。针对目前这个接口转换板的设计定位,这样的代价是值得的。而且我不希望单纯为了这个需求写这个程序,最大限度的重用是我设计的原则,这里涉及到模块化设计。
我理解的模块化就是堆积木,一个模块实现一个明确的功能;模块还可以细分,最小粒度的模块实现一个单一的功能;一般用一个.c和.h文件代表一个模块。归因于我设计水平低下,常常在实现的过程中需要增加功能调整接口。有感于以前看的万行文件和千行函数,我现在是新建文件控和新建函数控,工程目录下有很多.c.h对,每个.c基本不超过2千行,每个函数不超过200行,超过一百行的函数很少,主要是uCOS任务函数的消息处理循环。以前那个让我骂街无数次的程序,很大一个问题是如果想从里面拿某个功能出来修改或者移用,会发现像掰莲藕那样,处理那千丝万缕的联系足够头疼了,还不如自己重新写功能。模块化的设计,不只是方便未来维护修改或者重用,其实也提高了当前开发效率,例如实现单元测试,需要比较独立的功能模块。只可惜在急功近利的山寨厂里,不管是什么编程语言,总能看到慢慢变得臃肿的代码。新手们不敢轻易修改,熟手们忙得没时间完善,老手们懒得再去理会。开发就好像是使用一次性餐具ÿ