从不同格式的数据转储中提取数据


Extract data from different formatted data dumps

对于我当前的项目,我必须解析数据"转储"(来自微控制器的EEPROM HEX转储)(来自文件或SQL数据库),根据控制器中的软件版本具有不同的格式。(软件版本也在转储文件中)

提取版本工作,我有一个有点工作的版本,适用于一个特定的版本(但我发现当前的版本相当混乱)。因为不同的版本之间有一些重叠。

代码的输出是一个JSON数组,它被馈送给angular,将数据格式化成一个表,以便用户可以开始使用数据。(JSON是用json_encode生成的,效果很好)

我要找的是一个很好的(oop,如果可能的话)解决方案,可以从不同的文件版本中提取数据,而不需要大量的代码复制粘贴。我现在能想到的唯一解决方案是第一个版本的类,然后对第二个版本的新类进行复制粘贴(并进行一点编辑)(以此类推)。

关于如何做到这一点的通用答案对我来说很好,但是我试图在PHP中做到这一点。

首先为第一个版本创建一个基类和一个子类(下面的代码可能语法不完美):

class DataDump {
     // some kind of storage
     protected $contents;    
}
class FirstVersion extends DataDump {
}

然后,当您正在构建FirstVersion类时,请尽量密切关注您认为所有版本中可能存在的共同点,并将该代码移到DataDump父类中。

class DataDump {
     // some kind of storage
     protected $contents;  
     public loadFile($filename) {
          ....code....
          $this->contents = ...
     }
     public processHeader() {
     }
}
class FirstVersion extends DataDump {
     public loadFirstFile {
        $this->loadFile(...);
        $this->processHeader();
        ...some code specific to this version...
     }
}

然后,您可以慢慢地用通用的东西构建父类,并且几乎总是有部分代码是通用的(即使是在小段中)。当您构建其他子类时,您可能会发现可以共享的其他逻辑,因此将其下推到父类,或者可能存在一些子类重写的基方法,而其他子类只能使用基方法。

有时候,当你有一个大的混乱处理,很难看到所有的共享代码提前和如何最好地组织它在一个统一的方式,这一过程有助于极大地当你陷入困境。只要开始编写,您就会开始看到所有版本之间的模式,即使只是助手方法。