Рефакторінг

Листопад 10th, 2008

Ще одне цікаве завдання, з тих, що пропонує Яндекс:

Есть класс CodeGenerator, который умеет генерить код на разных языках.

  1.  
  2. class CodeGenerator
  3. {
  4. public:
  5.     enum Lang {JAVA, C_PLUS_PLUS, PHP};
  6.     CodeGenerator(Lang language) { _language=language; }
  7.     std::string generateCode()
  8.     {
  9.         switch(_language) {
  10.         case JAVA:        //return generated java code
  11.         case C_PLUS_PLUS: //return generated C++ code
  12.         case PHP:         //return generated PHP code
  13.         }
  14.         throw new std::logic_error("Bad language");
  15.     }
  16.     std::string someCodeRelatedThing() // used in generateCode()
  17.     {
  18.         switch(_language) {
  19.         case JAVA:        //return generated java-related stuff
  20.         case C_PLUS_PLUS: //return generated C++-related stuff
  21.         case PHP:         //return generated PHP-related stuff
  22.         }
  23.         throw new std::logic_error("Bad language");
  24.     }
  25.  
  26. private:
  27.     Lang _language;
  28. }
  29.  

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

(ще…)

Категорії: C/C++, Паттерни проектування | Теґи:, , , , , , | Кометарів немає