2016-09-23 4 views
0

Для моего текущего проекта мне приходится разбирать данные «дампы» (выходы EEPROM HEX с микроконтроллера) (поступающие из файла или базы данных SQL), которые имеют другой формат в зависимости от версии программное обеспечение в контроллере. (Версия программного обеспечения также находится в дампе.)Извлечение данных из разных отформатированных дампов данных

Извлечение версии работает, и у меня есть несколько рабочая версия, которая работает для 1 конкретной версии (но я считаю текущую версию довольно запутанной). Так как между различными версиями существует некоторое перекрытие.

Выходной сигнал кода представляет собой массив JSON, который подается на угловое устройство, которое форматирует данные в таблицу, чтобы пользователь мог начать воспроизведение данных. (JSON генерируется с помощью json_encode, отлично работает)

Что я ищу - это хорошее (возможно, по возможности) решение, которое может извлекать данные из разных версий файлов без большого количества копий кода. Единственное решение, о котором я могу думать прямо сейчас, было бы классом для первой версии, а не копировать-вставить (и немного редактировать) в новый класс 2-й версии (и так далее).

Общий ответ о том, как это сделать, подходит для меня, однако я пытаюсь сделать это на PHP.

+1

'сделайте копию-вставку (и немного отредактируйте) в новый класс. Возможно, пришло время начать узнавать о наследовании в ООП –

+0

@MarkBaker Вот почему я спрашиваю. Я знаю о наследовании, но я не знаю, как правильно это реализовать. Я мог бы создать родительский класс _huge_, но у меня есть ощущение, что это приведет к еще большему количеству спагетти кода. – user2986756

ответ

0

Start, сделав базовый класс и класс ребенка для первой версии (следующий код не может иметь идеальный синтаксис):

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

    } 
} 

Затем вы можете медленно строить родительский класс с вещами, которые являются общими, и есть почти всегда части кода, которые являются общими (даже если в небольших сегментах). По мере того, как вы создаете другие дочерние классы, вы можете найти другую логику, которая может быть разделена, поэтому надавите ее на родителя или, возможно, есть базовый метод, который переопределяет некоторые из дочерних классов, а другие могут просто использовать базовый метод.

Иногда, когда у вас есть большой беспорядок, с которым трудно справиться, трудно понять весь общий код и как наилучшим образом организовать его разумным способом, и этот процесс очень помогает, когда вы застряли. Просто начните писать, и вы начнете видеть шаблоны среди всех версий, даже если это просто вспомогательные методы.

Смежные вопросы