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

时间:2016-09-23 08:15:56

标签: php oop

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

提取版本有效,我有一个适用于1个特定版本的工作版本(但我发现当前版本非常混乱)。由于不同版本之间存在一些重叠。

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

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

关于如何做到这一点的一般答案对我来说很好,但是我想在PHP中这样做。

1 个答案:

答案 0 :(得分:0)

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

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...

     }
}

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

有时候,当你遇到很大的麻烦时,很难看到所有共享代码的前期以及如何以理智的方式最好地组织它,这个过程在你遇到困难时会有很大的帮助。刚开始写作,您将开始在所有版本中看到模式,即使只是辅助方法。