本文主要写自己在功能模块设计及编码时一些习惯。

     在面向对象的编程时我一般喜欢在一个文件中实现一个类,除非这个类的代码量非常的小而且简单,暂且把这个类也就叫着一个模块,毕竟模块可大可小,一个具备一定功能的类完全可以称为一个模块。既然他是模块就会设计到和其他模块的互相调用关系,我一直认为模块功能要清晰化,属于此模块的功能如果要提供给其他模块使用一定要公布API,而不能将数据直接暴露。如果出现了本模块需要调用的功能而又无法确定实现方式的,一般可以定义函数原型(暂且叫接口)然后公布这个原型,应用者只要将实现函数指针注册进来,然后本模块即可调用(系统的callback function也是这个意思)。

     在一个系统中会存在很多的功能模块,他们需要配合完成一些系统功能。结构上模块应该形成树状,就像一个父类可以派生多个子类,子类又可派生子类。应避免上下层模块互相调用,上层包含模块可以通过下层模块的接口调用下层模块,下层模块应该通过回调的方式调用上层模块的功能(这样避免下层再包含上层模块),或者这个实现可能是同层的其他模块,都可以通过上层模块牵线搭桥达到效果。这样形成的结构总是上次对下层的包含,模块层次上结构清晰,利于代码的阅读和维护。