10 月 16 日
昨天刚从成都赶回来,是去参加腾讯的招聘会了,比较忙,一共在成都待了5天,身心疲惫不堪,IPLE的开发基本也处于停滞状态,但是仍然在旅馆里有了很大发现,并进行了代码的重构。
经过总结得出了一点API设计经验,即传标识符,不穿指针。
- // 最初的设计
- void demoAPI(PBYTE pFileData, int width, int height);
- // 改良后的设计
- void demoAPI(HANDLE hFile);
这样的好处是,我们只需要在函数外部管理一个文件句柄就可以了,中间生成的文件映射句柄和数据指针都可以作为临时变量随用随创建,随用随释放。这样做就可以减少因为调用该函数而造成的无关代码以及因为这些无关代码引来的维护问题。
IPLE的所有与界面无关的API完全被放在DLL中,我之所以没有使用类,而是选择了函数方式是因为各个算法之间本身不存在任何继承关系,大家存在的仅仅是数据耦合,而我经过很多次API和类库设计实践后认为,方法和数据有时也需要进行分离,因为在系统设计中,为了增大代码重用率我们不得不建立比较复杂的关系和概念,虽然代码容易维护了,但是随着概念和关系数量的增加,维护起来恐怕就不是代码层次的问题了,很可能引起牵一发而动全身(这里指的是概念和关系,代码只是表现)。因此,为了减少概念和关系的大量引入和耦合,我们需要换个角度思考。
面向对象的思考方式:谁具备什么行为
我的一种思考方式:谁需要处理什么数据
P.S.:我这种尝试比较挑战现在大行其道的面向对象编程,但是思想还是面向对象思想,只是我认为面向对象的思想的最好实践并不总是面向对象编程。