如何重构代码以支持多个版本的硬件?

How to refactor a code to support multiple versions of hardware?

我正在开发一个新的现有代码库,其中假设文件 high_level_feature.cpp 是完全编写的,假设有 v1 版本的硬件。目前它包含 v1 硬件寄存器的头文件。

我现在需要添加对v2版本硬件的支持,谁的头文件与v1的寄存器名称相同,但偏移量和地址不同。

注意:版本是运行时检测的,不是编译时检测的。

所以很明显,我需要更改头文件中的名称才能添加两个头文件(v1 和 v2)并实现 high_level_feature.cpp 中的功能,这将支持 v1 和 v2 硬件。

是否有更好、更简洁的方法来重构代码并实现它?

谢谢, 基米

您的逻辑代码不应耦合到硬件。我建议为 HW1 和 HW2 创建一个接口并创建实现。由于您的代码将在 运行 时间内知道版本为 select 正确的硬件,因此使用虚拟接口是实现它的方法。

class HwInterface
{
  public:
    virtual void set_port() = 0;
};

class Hw1 : public HwInterface
{
  public:
    void set_port() override
    { 
      ...
    }
};

class Hw2 : public HwInterface
{
  public:
    void set_port() override
    { 
      ...
    }
};

class Logic
{
   public:
     void do_something(HwInterface& hw)
     {
       hw.set_port();
     }
};

void run(int version)
{
  Logic logic;

  if (version == 1) {
    Hw1 hw1;
    logic.do_something(hw1);
  }
  else {
    Hw2 hw2;
    logic.do_something(hw2);
  }
}