如何重构代码以支持多个版本的硬件?
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);
}
}
我正在开发一个新的现有代码库,其中假设文件 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);
}
}