再来一个,软件分层的一下思想。
1. 上层可以调用下层。 就如同沙发依靠在地板上。
2. 下层不能调用上层。 就如同地板的存在,不依赖于沙发的存在。
想象一下,在buzzer.c里面,依赖 application.h里面的接口。
3. 下层如果要依赖上一层的存在,没关系,可以用回调指针,在“初始化”的时候由上层传递函数指针下来。
这个一般是作为一种事件的传导,比如 写入/发送/操作OK, 或者接受成功时往上一层推送数据。
衍生的思想:
1.模块间的联系是低耦合。
沙发对于地板的依赖点越少,要移动到其他房间就越块。
如果沙发像树根一样,盘根错节地长在地板上,“移植起来”是非常痛苦的。
2.模块内的联系是高内聚。
沙发自身内部的结构联系要紧凑/高强度,才能稳定,不会中间塌掉。
|