Наследование классов для совместимости между версиями приложения? - PullRequest
0 голосов
/ 18 апреля 2019

Я рассматриваю возможность реализации, помимо наследования классов C ++, совместимости файлов между различными версиями приложений (например: открытие в myapp 2.0 файла, сохраненного из myapp 1.0 ).

Предположим, например, что myapp 1.0 имеет:

class employee {
   public:
      char *mp_name;
      unsigned int m_age;

      (and all needed serialization methods)
}

Далее вы разрабатываете myapp 2.0 , который добавляет поддержку длязарплаты, но вместо того, чтобы изменять классы в 1.0, вы получаете новые классы:

class employee20: public employee {
   public:
      unsigned int m_salary;

      (methods for creating employee20 from employee and viceversa)
      (and all needed serialization methods)
}

С этим механизмом, кажется, можно было бы легко добиться совместимости для чтения myapp 1.0 файлов из myapp 2.0 и даже возможность сохранять файлы 1.0 из версии 2.0, потому что employee20 имеет методы для создания одного объекта из другого в другой версии.

Но теперь давайте предположим, что вы выпустите myapp 3.0 который отбрасывает поддержку сотрудников возраста ...

Возможно ли удалить унаследованный член из производного класса?

Iзначит, это поМожно сделать что-то вроде этого:

class employee30: public employee20 {
   public:
      void m_age;

      (methods for creating employee30 from employee20 and viceversa)
      (and all needed serialization methods)
}

Или, возможно, нет способа сделать это, и это просто показывает, что я должен отказаться от идеи получения совместимости версий через наследование?

1 Ответ

0 голосов
/ 18 апреля 2019

Это не работает, потому что вы смешиваете дизайн класса с вводом / выводом приложения.Они отдельные.Наследование классов предназначено для определения внутренних объектов.Ввод / вывод предназначен для внешних данных приложения.

Хорошим подходом является наличие класса заставки / загрузчика.Таким образом, данные отделены от фактической реализации.Когда все меняется, класс сохранения / загрузки является единственной совместимой обработкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...