сериализация определений типов? - PullRequest
0 голосов
/ 29 апреля 2010

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

Например, у меня может быть тип с именем Widget:

Class Widget
      Public name as String
End Class

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

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

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

СЕЙЧАС ... все это хорошо и хорошо ...

Пока однажды моя модель не изменилась. Класс Widget теперь устарел как атрибут name и добавил множество других атрибутов. Конечно, я получу несоответствия типов на стороне администратора, когда попытаюсь восстановить эти данные.

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

1 Ответ

1 голос
/ 29 апреля 2010

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

Тогда десериализатор будет использовать множество операторов if, где он будет считывать только определенные части данных, если он более версии X, а когда он прочитал все, что упоминалось в десериализаторе, после этого он игнорирует все.

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

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