Объектно-ориентированный подход к обновлению - PullRequest
0 голосов
/ 17 сентября 2008

Мне было поручено поддерживать приложение, изначально написанное на VB6. С тех пор он был импортирован в VB .Net и, мягко говоря, код не является объектно-ориентированным. Код пронизан классами, которые не содержат ничего, кроме атрибутов (переменных) и методов (функций) Public Shared, в результате чего приложение не может открывать более одного проекта одновременно.

Проект состоит из XML-файла, который содержит общие параметры проекта, а также расположение в базе данных Access, которая содержит другие данные, связанные с проектом. За прошедшие годы формат файла XML был изменен, и была принята стратегия обновления и управления версиями. Выбранная стратегия выполняет обновление при открытии всякий раз, когда встречается старая версия. До настоящего времени обновления состояли только из перестановки данных в файле XML или внесения изменений в схему базы данных и перемещения данных из файла XML в базу данных.

Имея немного фона в ООП, мне легко увидеть, что проект должен быть автономным объектом, с которым взаимодействуют другие объекты. Однако я не вижу, как применить выбранную стратегию обновления в ООП.

Проблема реализации выбранной стратегии обновления в ООП пока не позволяет мне использовать ООП. Если у кого-то есть опыт выполнения такой задачи или рекомендации по ее выполнению, буду признателен за любую помощь, которую вы можете оказать.

Ответы [ 3 ]

1 голос
/ 17 сентября 2008

Создайте класс, который читает файл XML и предоставляет свойства / методы / и т. Д. На основе данных в этом файле. Когда класс записывает XML-файл обратно, отформатируйте его так, как необходимо для новой версии.

Таким образом, в принципе, класс сможет читать в текущей версии, а также все более старые версии, но он всегда будет записывать новую версию.

Данные будут храниться во внутренних переменных класса, вместо того, чтобы сканировать файл XML каждый раз, когда вам что-то нужно.

Добавление узла VERSION к вашему XML-файлу также поможет в этом случае.

0 голосов
/ 17 сентября 2008

Я не понимаю, почему это тревожная проблема. Это может быть решено любым количеством способов.

Если вы хотите выполнить полностью объектно-ориентированный тип корпоративного типа, вы можете воспользоваться любым подмножеством следующего решения:

  • Создать интерфейс IProject который описывает, как взаимодействуют другие объекты с проектом.
  • Создание текущей реализации Проект, который реализует IProject и может читать и писать в текущая версия.
  • Расширение проекта для каждого прошлого версия, переопределяя XML и методы чтения базы данных и имеющие вызов конструктора написать, когда они классы создаются
  • Для дополнительной предприимчивости создайте ProjectFactory, который обнаруживает версия файла и экземпляры правильная версия.
  • Если необходимы дополнительные версии, переписать текущий проект, чтобы сделать то же самое, что и прошлые проекты, доступ к новой версии проекта со всеми чтениями, а затем вызывая написать.

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

0 голосов
/ 17 сентября 2008

Возможно, вы ответили на свой вопрос, когда использовали слово «стратегия» (т. Е. Шаблон разработки стратегии).

Возможно, вы могли бы:

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