(1)程序为什么要分层?
因为复杂程序东西太多一个人搞不定,需要更多人协同工作,于是乎就要分工。要分工先分层,分层之后各个层次由不同的人完成,然后再彼此调用组合共同工作。
(2)本程序要完成一个计算器
我们设计了2个层次:上层是framework.c,实现应用程序框架;下层是cal.c,实现计算器。实际工作时cal.c是直接完成工作的,但是cal.c中的关键部分是调用的framework.c中的函数来完成的。
(3)先写framework.c,由一个人来完成。这个人在framework.c中需要完成计算器的业务逻辑,并且把相应的接口写在对应的头文件中发出来,将来别的层次的人用这个头文件来协同工作。
(4)另一个人来完成cal.c,实现具体的计算器;这个人需要framework层的工作人员提供头文件来工作(但是不需要framework.c)
(5)总结:1:对于简单问题来说,不分层反而容易理解;分层代码不好理解,看起来有点把简单问题复杂化的意思。原因在于实现计算器功能确实是简单问题,而简单问题就应该用简单方法处理。我们为什么明知错误还要这样做?主要目的是演示这种分层的写代码的思路和方法。
2:分层写代码的思路是:有多个层次结合来完成任务,每个层次专注各自不同的领域和任务;不同层次之间用头文件来交互。
3:分层之后上层为下层提供服务,上层写的代码是为了在下层中被调用。
4:上层注重业务逻辑,与我们最终的目标相直接关联,而没有具体干活的函数。
5:下层注重实际干活的函数,注重为上层填充变量,并且将变量传递给上层中的函数(其实就是调用上层提供的接口函数)来完成任务。
6:下层代码中其实核心是一个结构体变量(譬如本例中的struct cal_t),写下层代码的逻辑其实很简单:第一步先定义结构体变量;第二步填充结构体变量;第三步调用上层写好的接口函数,把结构体变量传给它既可。
示例代码:
cal.h:
#ifndef _CAL_H