Паспорт объекта

Везде в документации под объектом понимается экземпляр некоторого типа , сетевая или локальная служба, приложение.
Многие приложения имеют встроенную систему восстановления состояния.
Паспорт содержит:
  • уникальное имя или номер (можно GUID по привычке),
  • список его имен,
  • адрес его постоянного места жительства (место хранения его файла состояния)
  • адрес описания типа или уникальное имя ID типа в некотором справочнике (CLSID в реестре Windows для COM компонентов)
    • адреса хранения сборки (локальные и сетевые)
    • пространство имен
    • имя типа объекта
  • имена функций для сохранения и восстановления состояния объекта
  • текущий адрес объекта в памяти, в сети, в другом приложении,

Описание объекта сохраняется на диске вместе с его текущим состоянием (два файла, например xml). По этим двум файлам можно заново восстановить этот объект в памяти.
Копирование этих двух файлов + изменение уникального имени приводит к созданию локального клона объекта.
Предыдущая операция + копирование сборки (библиотеки) может использоваться для сетевого клонирования.
Для сильно связанных объектов ( например, спелчекер + база слов, кнопка + привязанная команда) требуется более сложная процедура клонирования. Здесь по выбору, тащить базу данных по сети или пользоваться сетевой ссылкой.
Возможен также выбор динамической привязки, например текстового поля в одном приложении к спелчекеру в другом приложении.
В случае с кнопкой такое вряд ли разумно. Жмешь на кнопку Запуска в одном приложении, а запускается команда в другом. В общем тут уже по ситуации.

Способы восстановления объектов:
1. Тип сам реализует два метода : Сохранить, Восстановить состояние

   public void Сохранить( string имяФайла)
   {
      ...
    }

   public static object Восстановить(string имяФайла)
   {
       ...
   }
Названия этих методов неважны, т.к. они указываются в описании объекта.
Помимо самостоятельно реализуемых методов можно воспользоваться готовыми реализациями (XMLSerializer, BinaryFormatter, SoapFormatter) см. код Сериализаторов
Универсальные методы
2. Создание пустой болванки в памяти без использования конструкторов.
Заполнение полей (как public, так и privet) сохраненными значениями. Использование свойств типов крайне не желательно, т.к. это вычисляемые значения, да и вообще это пара методов.
Если поле содержит другой объект, то возможны два варианта.
  1. Это именованный объект и он может быть уже восстановлен или скоро будет восстановлен. Связывание откладывается до полного восстановления объектов Регистратором. Второй проход должен восстановить связи. Либо имя этого объекта ищется сначала в списке восстановленных объектов, либо в списке еще невосстановленных объектов и восстанавливается.
  2. Это безымянный объект и его состояние вместе с описанием объекта сохранено внутри текущего объекта. Тогда сетевое копирование объекта будет требовать и копирования сборок безымянных объектов. Этого можно избежать если известен ID типа и известно место где можно искать сборки по ID или служба, которая хранит сборки по их ID. Обычно сборка статических объектов хранит строгие имена требуемых сборок (и затем их ищет либо в текущей папке, либо в Глобальном кэше сборок). В случае динамической сборки объекта, эти данные должны сохраняться в файле состояния объекта. Для файла состояния объекта можно использовать такую же структуру как в манифесте сборок.
2. Создание нового объекта с использованием конструкторов типа.

Last edited Feb 19, 2012 at 1:23 PM by awk72, version 22

Comments

No comments yet.