Как проводить рефакторинг ежегодно меняющихся php классов, чтобы избавиться от дублированного кода? - PullRequest
0 голосов
/ 30 января 2020

У меня есть структура классов для создания файлов FDF, которая меняется каждый год. Эти классы создают массивы, и эти массивы преобразуются в строки fdf, но это сейчас не важно.

мой первый класс - Fdf13, который составляет полный массив:

class Fdf13 extends FdfBaseStuff
{
      protected function fdfArray()                                
      {                                                     
          $this->buildPart1Dic();                                
          $this->buildPart1();                                

          $this->buildPart3();                                
          $this->buildPart4();                                
          $this->buildPart5();                                
          $this->buildPart6();                                
          $this->buildPart7();                                                         
          $this->buildPart8();                                                     
          $this->buildPart9();                                                                  
          $this->buildPart10();                                                                  
          $this->buildPart11();                                                      

          return $this->ret;                                                         
      }

      protected function buildPart5()
      {
          $this->ret = $this->add($this->ret, $this->calculator->lorem, '32');
          $this->ret = $this->add($this->ret, $this->calculator->ipsum, '33');
          $this->ret = $this->add($this->ret, $this->calculator->sit, '34');
          $this->ret = $this->add($this->ret, $this->calculator->amet, '35');
       }
...
}

В следующем году мне нужен новый класс, Fdf14. Я должен поместить одну новую строку в builsPart5, что 33a. мой Fdf14 наследует от Fdf13

class Fdf14 extends Fdf13
{
      protected function buildPart5()
      {
          $this->ret = $this->add($this->ret, $this->calculator->lorem, '32');
          $this->ret = $this->add($this->ret, $this->calculator->ipsum, '33');
          $this->ret = $this->add($this->ret, $this->calculator->dolor, '33a'); // new item
          $this->ret = $this->add($this->ret, $this->calculator->sit, '34');
          $this->ret = $this->add($this->ret, $this->calculator->amet, '35');
       }
...
}

У меня есть куча дублированных строк в Fdf14, 15, ... 20. метод add просто добавляет его возвращаемое значение (строку) к $ this- > ret массив.

Как это можно сделать с минимумом дублированных строк? Я думал просто добавить новые значения в массив ret в дочерних классах, но порядок элементов имеет значение. (Не в fdf, но у меня также есть компоновщик XML), поэтому я не могу просто добавить новое значение.

Моя вторая идея - создать массив 'schema' в классе нового года с правильным порядком. элементов, но с нулевыми значениями и обновите эти значения в методах buildPartX, но это должен быть более элегантный подход.

...