可配置的自定义代码

标签 c architecture refactoring

我们的客户提供的源代码中有部分代码将根据工具类型执行。下面给出了示例代码部分。该功能具有公共(public)部分和工具特定(硬件平台)部分。代码用C语言编写并在VxWorks中运行。添加或删除新刀具类型需要修改代码。客户希望以最少的代码更改和测试工作来添加或删除新的工具类型

int vsp_recv(char *const recv_text)
{
    int rc  = 0;
    const int       type =  get_tool_type();
    // Common Code  

    if (MODEL_CR == type)
    {
        rc = beamoff(recv_text);                
    }
    else
    {
        rc = vsp_set(recv_text);
    }

    return(rc);
}

将代码分成下面给出的两个方法,将它们保存在单独的源文件中并定义单独的 make 文件来生成工具特定的二进制文件,这是正确的技术吗?有没有更好的方法来做到这一点?

工具类型MODEL_CR代码

int vsp_recv_tool_speccific(char *const recv_text)
{
    return beamoff(recv_text);              
}

工具类型MODEL_CV代码

int vsp_recv_tool_speccific(char *const recv_text)
{
    return vsp_set(recv_text);              
}

重构方法

int vsp_recv(char *const recv_text)
{
    int rc  = 0;
    const int       type =  get_tool_type();
    // Common Code  

    rc = vsp_recv_tool_speccific(recv_text);                
}

最佳答案

为每个工具定义一个共享库,并定义一个配置文件来定义每个工具调用哪些函数。在启动时加载共享库,并提供信号捕获器,以便在配置文件更改时重新加载。

关于可配置的自定义代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44415299/

相关文章:

c# - 需要架构指导?

c - 通过在一行中读取数组的大小和数组的元素来将整数存储为数组

c - 二叉树,C语言

java - 在没有 Mosby 的 Android 中实现 MVI 架构

tsql - 除了RedGate之外,还有用于T-SQL的任何好的代码分析/重构工具吗?

c++ - 是否有用于 C++ 项目的类似 ReSharper 的工具?

refactoring - 消除单个文件中的代码重复

c - 如果打印此内存位置的内容,为什么会出现段错误

C初学者不终止程序

python - Django 是用于前端还是后端?