嵌入式技术
看了公司的老项目,真的一点都不想维护,能写出这样的代码,笔者也有点不理解,只能说维护的同事要加油,新的项目放过它让我来。过去几个月真的就是“全干工程师”,读者能想到的基本都涉及了,再加上要应付摆烂同事耽误的进度,工作投入的时间还是比较多的,今天就来聊聊解耦那些事!
| 咨询AI
通过咨询AI可以了解到,目前常用的解耦手段有以下几种:
解耦是指将程序中的不同部分或模块之间的依赖关系降到最低,使得它们可以独立地进行修改、测试和维护。在C语言中,有几种常见的方法可以实现解耦:
模块化设计:将程序划分为多个功能独立的模块,并通过接口定义模块之间的交互方式。每个模块只关注自己的功能,对其他模块的实现细节一无所知,从而实现了模块间的解耦。
接口设计:在模块之间定义清晰的接口,明确定义函数的输入和输出,遵循接口编程的原则。模块之间通过接口进行通信,而不是直接访问对方的内部数据结构,这样可以减少模块之间的依赖性,提高代码的可维护性。
使用回调函数:回调函数是一种将某个函数作为参数传递给另一个函数,并在需要时由后者调用的机制。通过使用回调函数,可以在不修改原有代码的情况下改变程序的行为,从而实现模块之间的解耦。
事件驱动编程:采用事件驱动的编程模型,将程序的执行流程控制权交给事件处理器,不同的模块通过发布和订阅事件的方式进行通信。这种方式可以将模块之间的耦合度降低到最低,实现高度解耦的设计。
使用设计模式:设计模式是一些被广泛接受和验证的代码组织思想和最佳实践。在C语言中,一些常用的设计模式如观察者模式、策略模式、工厂模式等可以帮助实现模块之间的解耦,提高代码的可扩展性和复用性。
以上是几种常见的C语言解耦的方法,通过采用这些方法,可以提高程序的模块化程度,降低模块之间的依赖关系,使得代码更加灵活、可维护和可扩展。
上面这几种或多或少都有写过相关推文,在项目中灵活使用即可。
| 简单理解
解耦出现的原因各位读者认为是什么呢,笔者认为解耦最直接的原因就是好理解,可读性和可移植性都不错,解耦的本质其实就是私有化。有学过其他语言的读者就会发现,访问权限是很经常使用的,但是c语言并没有这些原生语法,那就很依赖开发人员的技巧去实现,下边就简单聊聊:
模块化
模块化其实就是把一个整体拆分成不同的功能模块,就是一个化整为零的一个解决问题的思路,在项目中的体现就是xx.c文件和xx.h文件,应该没有哪个读者不进行模块化的吧,这里就不过多解析。
结构分层
搞嵌入式的基本都偏向底层开发,团队大点的部门还会细分不同的岗位职责,但是要以独立开发为核心,要对项目有个整体的认知,并对项目中的实现进行分层,再对项目的不同实现进行模块化,这里也不过的介绍,感兴趣的读者直接在本号搜索一下。
局部化
局部化是笔者自取的,就是把变量或者函数限制在特定的模块中,当项目中存在多个项目同时编译时,所有未加 static 前缀的全局变量和函数都具有全局可见性,除了常见的使用,还可以是下边这样使用:
#include "stdio.h" void test(int select) { static int data; if(select==0) { // 初始化 data = 0; } else if(select==0) { // 功能处理 } } int main() { test(0); while (1) { test(1); } }
接口设计
接口设计其实就是结构体封装,把模块化的全局变量和函数,封装到一个结构体中,在其他模块中调用结构体里边的对外接口,这就是接口设计的简单理解,高级的操作就是把结构体当成面向对象的类来使用,具体要看实际的使用。
回调函数
回调函数已经写了几篇推文进行介绍过了,这个就不再过多的展开来聊,感兴趣的读者,直接在本号搜索即可找到。
事件驱动
事件驱动其实就是之前聊的状态机,之前连续写了两篇介绍状态机的,看完那两篇推文就很清楚状态机的使用,状态机就是运用到了事件驱动这个思路来编写,通过获取不同的事件标志来调用不同的运行,来实现不同业务功能。
设计模式
设计模式输入高级操作,看看后续有没时间再写些相关的。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !