介绍几种常见的C语言解耦方法

嵌入式技术

1368人已加入

描述

看了公司的老项目,真的一点都不想维护,能写出这样的代码,笔者也有点不理解,只能说维护的同事要加油,新的项目放过它让我来。过去几个月真的就是“全干工程师”,读者能想到的基本都涉及了,再加上要应付摆烂同事耽误的进度,工作投入的时间还是比较多的,今天就来聊聊解耦那些事!

| 咨询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);
    }
}

 

接口设计

接口设计其实就是结构体封装,把模块化的全局变量和函数,封装到一个结构体中,在其他模块中调用结构体里边的对外接口,这就是接口设计的简单理解,高级的操作就是把结构体当成面向对象的类来使用,具体要看实际的使用。

回调函数

回调函数已经写了几篇推文进行介绍过了,这个就不再过多的展开来聊,感兴趣的读者,直接在本号搜索即可找到。

事件驱动

事件驱动其实就是之前聊的状态机,之前连续写了两篇介绍状态机的,看完那两篇推文就很清楚状态机的使用,状态机就是运用到了事件驱动这个思路来编写,通过获取不同的事件标志来调用不同的运行,来实现不同业务功能。

设计模式

设计模式输入高级操作,看看后续有没时间再写些相关的。

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分