Средства сопряжения типов

Иллюстрации

Показать все

Заявленное изобретение относится к способам и системам для преобразования объекта одного типа в объект другого типа. Техническим результатом является обеспечение возможности изменения или конфигурирования для конкретных нужд работы процесса преобразования во время выполнения. Преобразование можно осуществить в расширяемом средстве сериализации, которое выполняет сериализацию, десериализацию и преобразование объектов различных типов. Изменения в работу средства сериализации во время выполнения вносят посредством одной или более процедур расширения, которые реализуют требующееся конфигурирование для конкретных нужд или расширения, не требуя при этом замены других имеющихся процедур. На основе информации о типе, идентифицированной для исходного объекта, объект преобразуют в промежуточное представление, которое допускает изменение во время выполнения, включая изменение имен объекта, типов объекта и данных объекта. Промежуточное представление исходного объекта изменяют в соответствии с процедурами расширения, которые вносят изменения в работу средства сериализации во время выполнения, и промежуточное представление преобразуют в целевой объект или тип. 5 н. и 30 з.п. ф-лы, 6 ил.

Реферат

I. Область техники, к которой относится изобретение

Настоящее изобретение относится к сериализации объектов. Более конкретно, настоящее изобретение относится к способам, системам и компьютерным программным продуктам для преобразования объектов одного типа в объекты другого типа посредством процедур расширения, которые вносят изменения в работу средства сериализации во время выполнения без необходимости замены других имеющихся процедур средства сериализации.

II. Предшествующий уровень техники

Вообще говоря, сериализация представляет собой преобразование отдельных объектов “в памяти” (тип объекта, байты которого содержатся в оперативной памяти и который используется при пересылке последовательностей байтов между независимыми процессами) или графа (вложенных) объектов “в памяти” в линейную последовательность байтов, подходящую для передачи в удаленное местоположение, сохранения на диске и т.п. Напротив, десериализация берет последовательность байтов и создает соответствующие отдельные объекты “в памяти” или граф объектов “в памяти”. Результатом совместного действия сериализации и десериализации является создание точной копии исходного объекта.

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

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

Для традиционного кода сериализации также характерна слабая гибкость в плане идентификации объектов, подлежащих преобразованию, или выполнение преобразований на основе данных, содержащихся в объекте. Соответственно требуются способы, системы и компьютерные программные продукты для преобразования объектов одного типа в объекты другого типа на основе специализированных (под конкретные нужды) процедур для внесения изменений в сериализацию и десериализацию во время выполнения без необходимости повторного осуществления стандартных процедур.

Сущность изобретения

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

В одном иллюстративном варианте осуществления информацию о типе идентифицируют для исходного объекта, принятого средством сериализации для обработки. На основе этой информации о типе исходный объект преобразуют в промежуточное представление, которое допускает изменения во время выполнения, включая изменение имен объекта, типов объекта и данных объекта. Промежуточное представление исходного объекта изменяют в соответствии с одной или более процедурами расширения, которые вносят изменения в работу средства сериализации во время выполнения, и промежуточное представление преобразуют в целевой объект целевого типа.

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

Когда исходный объект является объектом “в памяти”, средство сериализации осуществляет сериализацию исходного объекта с целью формирования целевого объекта. Целевой объект может быть отформатирован в соответствии с расширяемым языком разметки (XML) или другим форматом, подходящим для представления сериализованного объекта. Аналогично, когда целевой объект является объектом “в памяти”, средство сериализации осуществляет десериализацию исходного объекта для формирования целевого объекта. Создание экземпляра целевого объекта и его заполнение могут быть выполнены как часть процесса десериализации. При некоторых обстоятельствах как исходный объект, так и целевой объект могут быть объектами “в памяти” или оба могут быть сериализованными объектами, например, когда средство сериализации выполняет преобразование объекта. Для снижения требований к буферизации внесение изменений в промежуточное представление может быть отложено до преобразования этого промежуточного представления в целевой объект.

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

Перечень фигур чертежей

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

Фиг. 1 - иллюстративный модуль сериализации и инфраструктура (основополагающая совокупность компонентов, объединенная в систему) сериализации согласно настоящему изобретению;

Фиг. 2-4 - преобразования объектов в контексте иллюстративных сериализации, десериализации и конвейеров преобразования типов;

Фиг. 5А-5В - иллюстративные действия и этапы способов осуществления сериализации, десериализации и преобразования объектов согласно настоящему изобретению;

Фиг. 6 - иллюстративная система, которая обеспечивает подходящую операционную среду для настоящего изобретения.

Подробное описание предпочтительных вариантов осуществления

Настоящее изобретение охватывает способы, системы и компьютерные программные продукты для преобразования объектов исходного типа в объекты целевого типа и позволяет изменять или конфигурировать для конкретных нужд работу процесса преобразования во время выполнения. Варианты осуществления настоящего изобретения могут содержать один или более компьютеров специального назначения и/или один или более компьютеров общего назначения, включающих в себя различные аппаратные средства, что описано ниже более подробно со ссылкой на Фиг. 6.

На Фиг. 1 изображен иллюстративный модуль сериализации и инфраструктура 100 сериализации (также известные как средство сериализации) согласно настоящему изобретению. Для экземпляра 110 объекта модуль 100 сериализации создает соответствующий сериализованный объект 150 расширяемого языка разметки (XML). Аналогично для объекта 160 XML модуль 100 сериализации создает соответствующий десериализованный экземпляр 170 объекта. Следует отметить, в материалах заявки термин “сериализация” используется в качестве обобщенного термина для сериализации (например, преобразования отдельных объектов “в памяти” или графа объектов “в памяти” в линейную последовательность байтов, подходящую для передачи в удаленное местоположение, сохранения на диске и т.п.), десериализации (создания из линейной последовательности байтов соответствующих отдельных объектов “в памяти” или графа объектов “в памяти”), преобразования (преобразования одного объекта в другой) и т. п. Это, например, относится к рассматриваемому случаю, где модуль 100 сериализации выполняет сериализацию, десериализацию и преобразование объектов различных типов.

Модуль 100 сериализации включает в себя один или более модулей 120 отражения, один или более модулей 130 преобразования и один или более модулей 140 формирования. В этом иллюстративном варианте осуществления модуль 100 сериализации преобразует принятый экземпляр 110 объекта “в памяти” в объект 150 XML, подходящий для передачи в удаленное местоположение, и преобразует принятый экземпляр 160 объекта XML в экземпляр 170 объекта “в памяти”. Естественно, “в памяти” и XML - это просто примеры типов объектов, которые могут быть созданы или приняты модулем 100 сериализации. Каждый из модулей из состава модуля сериализации (модули 120 отражения, модули 130 преобразования и модули 140 формирования) могут быть заменены во время выполнения для сконфигурированной для конкретных нужд сериализации, десериализации или преобразования.

Модули 120 отражения отвечают за идентификацию информации о типе для принятого экземпляра 110 объекта и принятого объекта 160 XML. Информация о типе может включать в себя сохраненные или принятые метаданные, которые ассоциированы с управляемыми типами в среде управляемого кода. В качестве альтернативы, информация о типе может поступать в модули 120 отражения из различных источников, включая автоматическую генерацию во время компиляции, ручную генерацию, информацию о стандартных типах и т.п.

Модули 130 преобразования выполняют преобразования между объектами различных типов. Иллюстративные процессы преобразования описаны ниже более подробно со ссылкой на Фиг. 2-4. Преобразование между различными объектами может иметь произвольную степень сложности и включают в себя формирование промежуточных объектов. Часть этой сложности может включать в себя преобразование на основе данных в объекте и шаблонов типов, ассоциированных с объектом. Например, то, какие преобразования выполняются, может зависеть от определенных типов объектов или имен типов, существования определенных именованных или типизированных свойств типа, существования свойства с определенными присоединенными метаданными, имен объекта, ассоциированных с объектом, и т.п. Преобразование может быть отложено до формирования целевого объекта для того, чтобы снизить требования или избежать буферизации, которая, в противном случае, может оказаться частью преобразования одного объекта в другой.

Модули 140 формирования отвечают за формирование целевого объекта, создаваемого модулем 100 сериализации. В случае объекта 150 XML модуль 140 формирования создает этот объект - он формирует надлежащее XML-представление для этого объекта - и может записать объект в поток. В случае экземпляра 170 объекта модуль 140 формирования создает экземпляр объекта и заполняет его.

Согласно вышесказанному модуль 100 сериализации известен как средство сериализации. Как показано на Фиг. 1, средство сериализации скомпоновано из нескольких упорядоченных наборов модулей. В совокупности эти модули отвечают за все операции. Отдельный модуль известен как средство сопряжения типов, поскольку, как это описано более подробно ниже, модули выполняют преобразование из одного типа в другой (или сопрягают разные типы). Средство сопряжения типов позволяет выполнять преобразования типов и экземпляров во время выполнения и/или отслеживать информацию о сериализуемом, десериализуемом или преобразуемом объекте. Со ссылкой на Фиг. 2-4, упорядоченный набор средств сопряжения типов известен как конвейер сопряжения типов и в общем случае соответствует упорядоченному набору модулей 130 преобразования. Для каждой из выполняемых средством сериализации операций может существовать отдельный конвейер сопряжения типов. Имеется конвейер для сериализации (например, по Фиг. 2), десериализации (например, по Фиг. 3), преобразования (например, по Фиг. 4), копирования объекта и т.п. Перед отдельным описанием каждой из Фиг. 2-4 ниже представлена информация, в общем случае применимая к всем трем чертежам.

Для иллюстративных конвейеров, показанных на Фиг. 2-4, код (один или более модулей), который отвечает за сериализацию, десериализацию и преобразование объектов, реализован как некоторое количество заранее определенных средств сопряжения типов. Эти модули помещены в соответствующий конвейер и используются во время выполнения. (Образованные пунктирными линиями квадраты по Фиг. 1 предназначены для представления модулей сопряжения типов, доступных для использования в различных конвейерах сопряжения типов). Большая часть открытого интерфейса прикладного программирования (API) для иллюстративного средства сериализации по Фиг. 1 представляет собой упаковщик (программное средство создания оболочки для стандартизации внешних обращений) для этого заранее определенного набора конвейеров. Это демонстрирует то, как средство сериализации обеспечивает возможность расширения - средство сериализации представляет собой простой набор абстрактных конвейеров. Фактическая реализация специфических логических операций осуществляется в подключаемых модулях, которые могут быть заменены в любое время.

Для иллюстративных конвейеров сопряжения типов, изображенных на Фиг. 2-4, заданное средство сопряжения типов может преобразовывать один из трех типов объектов: объект исходного типа, объект промежуточного типа и объект целевого типа. На Фиг. 4 объект исходного типа представляет собой объект управляемого кода, объект целевого типа представляет собой объект XML, основывающийся на стандарте Infoset консорциума по “Всемирной паутине” (W3C). Объект промежуточного типа или промежуточное представление, показанное на всех трех фигурах, - это конструкция в составе средства сериализации и, как это описывается более подробно ниже, представляет точку расширения. Промежуточное представление - это изменяемый объект, основывающийся на изменяемом типе. Как таковой, изменяемый тип служит для определения поведения и хранилища типизированных данных, при этом изменяемый объект служит для хранения типизированных данных и воздействия на сохраненные данные в соответствии с поведением, определенным для этого типа.

На Фиг. 2 показано иллюстративное средство 200 сопряжения типов, предназначенное для сериализации исходного объекта 240 “в памяти” исходного типа или формата 210. (Используемый в описании и формуле изобретения термин “тип” следует интерпретировать широко, чтобы он охватывал любые типы или форматы объектов.) Используя стандартную процедуру 250, исходный объект 240 преобразуют в промежуточное представление 260А, имеющее промежуточный тип или формат 220. Как будет описано более подробно ниже, это промежуточное представление является изменяемым и позволяет изменять как типы объектов, так и данные объектов. Тем не менее, промежуточный формат 220 и исходный формат 210 также могут совпадать, быть близко связанными, отличаться в некоторой степени, полностью отличаться и т.д.

Специализированная процедура 260 расширения преобразует промежуточное представление 260А исходного объекта 240 в промежуточное представление 260В. Это преобразование может включать в себя изменение типов объекта, имен объекта, данных объекта и т.п. Специализированная процедура 260 расширения представляет расширение средства сериализации во время выполнения в общем и конвейера 200 сопряжения типов в частности. Следует отметить, что использование специализированной процедуры 260 расширения не требует повторной реализации стандартной процедуры 250, что обычно имеет место в случае традиционных реализаций сериализации.

Стандартная процедура 270 преобразует промежуточное представление 260В в целевой объект целевого типа или формата 230. Целевой объект 280 пригоден для передачи в удаленное местоположение, сохранения на диске и т.п. Соответственно целевой формат 230 целевого объекта 280 включает в себя широкий спектр типов объектов. Здесь, как и других частях описания, тип, формат и представление объекта представляют собой понимаемые в широком смысле термины, которые охватывают тип и формат объекта в целом и тип, формат, имена и данные, которые могут содержаться в объекте.

Фиг. 3 показывает иллюстративное средство 300 сопряжения типов, предназначенное для десериализации объекта 340 исходного типа или формата 330. Аналогично вышеприведенной Фиг. 2 стандартная процедура 350 преобразует исходный объект 340 в промежуточное представление 360А с промежуточным типом или форматом 320. Специализированная процедура 360 преобразует промежуточное представление 360А в промежуточное представление 360В. Следует отметить, что промежуточный тип 320 представляет один или более промежуточных типов. Соответственно промежуточное представление 360А и промежуточное представление 360В могут быть разными типами, но тем не менее обозначаются как промежуточный тип, особенно в отношении исходного типа 330 и целевого типа или формата 310.

Стандартная процедура 370 преобразует промежуточное представление 360В в целевой объект 380 целевого типа 310. Поскольку конвейер сопряжения типов предназначен для десериализации, целевой объект представляет собой объект “в памяти”, для которого создан экземпляр и который заполнен. Как будет описано ниже более подробно, конвейер 300 сопряжения типов связан с кодом для создания и заполнения экземпляров объектов. Этот код можно назвать фабрикой или средством записи экземпляров либо записывающей фабрикой, и он в общем случае соответствует модулям 140 формирования по Фиг. 1.

Фиг. 4 показывает иллюстративный конвейер 400 сопряжения типов, предназначенный для преобразования исходного объекта 440 в целевой объект 480. Отдельные средства сопряжения типов, имеющиеся на Фиг. 4, способны преобразовывать один из трех разных типов или форматов объектов: объекты 410 управляемого кода/форматированные в соответствии с CLR, объекты 420 промежуточные/форматированные в соответствии с Flex и объекты 430 Infoset/ форматированные в соответствии с XML. CLR обозначает общеязыковую среду выполнения (Common Language Runtime) и является частью среды выполнения программ, управляемой Microsoft.NET®. Среди прочего, преимущества CLR включают в себя межъязыковую интеграцию, межъязыковую обработку исключительных ситуаций и т.п. Компиляторы языков программирования формируют метаданные для описания типов, членов и ссылок. Метаданные хранятся с кодом в машинонезависимом исполняемом файле CLR. Естественно, CLR - это просто один из примеров типа управляемого кода. Как следует из Фиг. 4, оба объекта могут быть объектами “в памяти” (например, объекты, форматированные в соответствии с CLR) или, в качестве альтернативы, оба объекта могут быть сериализованными объектами (например, объекты, форматированные в соответствии с Infoset). Иными словами, как исходный, так и целевой объект могут быть одного типа.

Объекты 410 CLR - это экземпляры типов CLR, которые содержат комбинацию данных и поведения, хотя только данные существенны для целей сериализации. Как было отмечено выше, объект или представление 430 Infoset форматирован согласно стандарту W3C на древовидную структуру, скомпонованную из заранее определенного набора узлов данных с определенной семантикой. Объект 420 Flex - структурный компонент, находящийся в средстве сериализации и представляющий точку расширения для объекта, выполняющего сериализацию.

Объект Flex - это изменяемый объект, который основывается на изменяемом типе. Изменяемый тип известен как тип Flex. В иллюстративном конвейере 400 сопряжения типов, показанном на Фиг. 4, тип Flex имеет ту же функцию, что и соответствующий тип CLR: определение поведения и хранение данных типа. Аналогично объект Flex имеет ту же функцию, что и объект CLR: хранение типизированных данных и воздействие на эти данные посредством поведения определенного для этого типа. Причиной использования типа Flex и объекта Flex состоит в том, что типы CLR неизменяемые.

Для иллюстративного конвейера сопряжения типов, показанного по Фиг. 4, определенные ограничения налагаются на типы, которые могут быть сериализованы, для стимуляции простоты и расширяемости. Эти ограничения сокращают количество отличающихся шаблонов и перестановок, которые объект, выполняющий сериализацию, должен распознать для сериализации и десериализации заданного типа. С этой целью средство сериализации понимает только то, как выполнить сериализацию объектов CLR, типы которых согласуются с тем, что известно как базовая модель. Типы, которые согласуются с базовой моделью, должны либо открыто предоставлять свои данные в качестве свойств (или полей), либо реализовывать конкретный интерфейс (который определяет явные методы для чтения и записи). Кроме того, эти типы должны предоставлять открытый конструктор по умолчанию (функцию-член класса с тем же именем, что и сам класс, не имеющую аргументов и создающую и инициализирующую объект данного класса). Для типов, которые не согласуются с базовой моделью, нельзя выполнить сериализацию.

Типы Flex и объекты Flex используются для изменения формы (членов, интерфейсов и т.п.) заданного объекта CLR для соответствия базовой модели. Для заданного объекта CLR может быть сконструирован тип Flex, который предоставляет набор информации о членах и типах, отличающийся от типа экземпляра CLR. Может быть создан экземпляр основывающегося на типе Flex объекта Flex, который делегирует некоторые вызовы самому объекту CLR. Объект Flex также может в необязательном порядке выполнять преобразования данных объекта CLR либо перед делегированием, либо после него. В результате данные объекта CLR могут быть предоставлены различными способами, включая способ, который согласуется с базовой моделью. Соответственно средство сопряжения типов может начать с типа объекта, который не согласуется с базовой моделью, и создать тип объекта, который согласуется с базовой моделью.

Средство сопряжения типов может преобразовывать объекты CLR, объекты Flex и представления Infoset различными путями. Любое заданное средство сопряжения типов имеет входной тип, на который оно воздействует, и выходной тип, который оно создает или формирует. Этот выходной тип передается следующему средству сопряжения типов в конвейере. Для иллюстративного конвейера 400 сопряжения типов допустимы следующие преобразования:

Входной тип Выходной тип Описание
CLR CLR Преобразует объект CLR в новый объект CLR
CLR Flex Преобразует объект CLR в объект Flex
CLR Infoset Преобразует объект CLR в объект Infoset
Flex Flex Преобразует объект Flex в новый объект Flex
Flex CLR Преобразует объект Flex в объект CLR
Flex Infoset Преобразует объект Flex в объект Infoset
Infoset Infoset Преобразует объект Infoset в новый объект Infoset
Infoset Flex Преобразует объект Infoset в объект Flex
Infoset CLR Преобразует объект Infoset в объект CLR

Различные классификации средств сопряжения типов составлены для обеспечения базовых операций средства сериализации. (Хотя Фиг. 2 и 3 ссылаются на общие типы, ниже ссылки на эти фигуры делаются с конкретными типами, проиллюстрированными на Фиг. 4, для обеспечения последующего контекста).

1. Сериализация преобразует объект CLR в объект или представление Infoset. Для выполнения этой операции обеспечен конвейер средств сопряжения типов (например, такой, как показан на Фиг. 2), который включает в себя средство сопряжения типов для преобразования CLR во Flex (например, стандартная процедура 250), любое количество средств сопряжения типов для преобразования Flex во Flex и средство сопряжения типов для преобразования Flex в Infoset (например, стандартная процедура 270).

2. Десериализация преобразует представление Infoset в объект CLR. Для выполнения этой операции обеспечен конвейер средств сопряжения типов (например, такой, как показан на Фиг. 3), который включает в себя средство сопряжения типов для преобразования Infoset во Flex (например, стандартная процедура 350), любое количество средств сопряжения типов для преобразования Flex во Flex и средство сопряжения типов для преобразования Flex в CLR (например, стандартная процедура 370).

3. Копирование объекта используется для создания детальной (с воспроизведением всех элементов структуры) копии объекта CLR. Для выполнения этой операции обеспечен конвейер средств сопряжения типов, который включает в себя средство сопряжения типов для преобразования CLR в CLR.

4. Преобразование объекта (Фиг. 4) создает детальную копию (целевой объект 480) из объекта или объектов CLR (исходного объекта 440), выполняя при этом, в необязательном порядке, преобразования (стандартная или специализированная процедура 460) в отношении данных экземпляра (промежуточных представлений 460А и 460В). Для выполнения этой операции обеспечен конвейер средств сопряжения типов, который включает в себя средство сопряжения типов для преобразования CLR во Flex (стандартная или специализированная процедура 450), в необязательном порядке одно или более средств сопряжения типов для преобразования Flex во Flex (стандартная или специализированная процедура 460), которые выполняют преобразования, и средство сопряжения типов для преобразования Flex в CLR (стандартная или специализированная процедура 470).

5. Преобразование Infoset создает копию объекта Infoset и, в необязательном порядке, преобразует его. Аналогично копированию объекта для выполнения этой операции обеспечен конвейер средств сопряжения типов, который включает в себя средство сопряжения типов для преобразования Infoset в Infoset.

Последние три пункта заслуживают внимания вследствие способа, согласно которому они реализуются. В то время как другие реализации буферизуют объект или данные Infoset, варианты осуществления настоящего изобретения могут отложить преобразования для того, чтобы снизить требования к буферизации или избежать ее. В результате производительность и управление ресурсами значительно улучшаются.

Для поддержки вышеописанных операций средство сериализации обеспечивает главные или базовые средства сопряжения типов, которые выполняют соответствующие преобразования. На Фиг. 4 любая из стандартных или специализированных процедур 450, 460 и 470 может представлять собой главное средство сопряжения типов или специализированное замещение. Используя расширяемый механизм конфигурирования, надлежащие средства сопряжения типов идентифицируются и загружаются в конвейеры во время выполнения. Средство сериализации использует эти главные конвейеры для выполнения требующихся операций. Однако главные средства сопряжения типов могут быть заменены в любое время, поскольку средство сериализации использует представление абстрактных средств сопряжения типов, а не конкретные реализации главных средств сопряжения типов. В одном иллюстративном варианте осуществления конвейер просто содержит список средств сопряжения типов для этого конвейера - изменение списка изменяет конвейер. Для этого иллюстративного варианта осуществления, после того как для объекта осуществлен вызов конкретного средства сопряжения типов, другие средства сопряжения типов для этого объекта не вызываются.

Следует отметить, что для иллюстративного варианта осуществления CLR 410 Flex 420 и Infoset 430 соответствуют исходному формату 210, промежуточному формату 220 и целевому формату 230 для сериализации, как это показано на Фиг. 2, и соответствуют целевому типу 310, промежуточному типу 320 и исходному типу 330 для десериализации, как это показано на Фиг. 3. Объект Flex - это промежуточный формат между CLR и Infoset. В этом иллюстративном варианте осуществления средству сопряжения типов запрещено выполнять преобразования непосредственно из CLR в Infoset и наоборот. Среди прочего, это помогает упростить иллюстративное средство сериализации. Хотя базовые функциональные возможности или операции средства сериализации определяются главными средствами сопряжения типов, могут быть многочисленные дополнительные функциональные возможности (например, поддержка существующих моделей программирования), ожидаемые разработчиками. Главные средства сопряжения типов можно спроектировать для реализации этих дополнительных функциональных возможностей, однако вместо этого имеются несколько главных средств сопряжения типов для преобразования Flex во Flex, которые служат для этой цели. Этот подход гарантирует простоту и расширяемость главных средств сопряжения типов. В результате разработчики могут модифицировать стандартные функциональные возможности и обеспечивать их собственные новые функциональные возможности.

Для этого иллюстративного варианта осуществления рассмотрим процесс сериализации для типа CLR с именем Person (Личность) и с двумя свойствами: FirstName (Имя) и LastName (Фамилия). Для сериализации (см. Фиг. 2) экземпляра этого типа требуется конвейер с главными средствами сопряжения типов для преобразования CLR во Flex и Flex в Infoset. Средство сериализации подает экземпляр Person на средство сопряжения типов для преобразования CLR во Flex. Это средство сопряжения типов возвращает новый экземпляр объекта Flex, основывающийся на экземпляре Person, которому он выполняет делегирование. Затем объект Flex подается на средство сопряжения типов для преобразования Flex в Infoset.

Средство сопряжения типов для преобразования Flex в Infoset отвечает за преобразование объекта Flex в представление Infoset. Перед выполнением этого преобразования главное средство сопряжения типов для преобразования Flex в Infoset определяет способ, согласно которому следует отобразить структуру объекта Flex в Infoset. Реализация главного средства сопряжения типов в этом примере использует язык схемы (логической структуры в базах данных) и определяет отображения с помощью логических конструкций, определенных в этом языке. Поскольку средства сопряжения типов заменяемы, можно ввести новый механизм отображения, включая поддержку нового языка схемы, который представляет другую точку расширения в средстве сериализации. После завершения процесса отображения объект Flex преобразуется в представление Infoset, которое записывается в поток.

Как было упомянуто выше вкратце, средства сопряжения типов в средстве сериализации соединены с записывающими фабриками. Записывающие фабрики отвечают за создание ресурса, который может записывать данные. Хотя этот ресурс может записывать данные в любой целевой объект, наиболее общими пунктами назначения являются потоки данных (вслед за сериализацией для транспортировки) и объекты CLR (вслед за десериализацией). Главная записывающая фабрика в контексте этого иллюстративного варианта осуществления возвращает ресурс, который осуществляет запись в предоставляемый пользователем поток данных. Ресурс, созданный этой фабрикой, может осуществлять запись в поток в любом желаемом формате. Как таковой, он не привязан к формату сериализации XML, что делает записывающую фабрику заменяемой и вводит еще одну точку расширения в средство сериализации.

Десериализация (см., например, Фиг. 3) представления Infoset в контексте этого иллюстративного варианта осуществления задействует конвейер, который включает в себя главные средства сопряжения типов для преобразования Infoset во Flex и Flex в CLR. Средство сериализации подает предоставленный пользователем поток, представляющий исходный тип Infoset, а также тип CLR (Person), десериализация которого выполняется первым средством сопряжения типов (Infoset во Flex). Это средство сопряжения типов создает новый экземпляр объекта Flex на основе типа Person, который осуществляет делегирование потоку. Результирующий объект Flex подается на средство сопряжения типов для преобразования Flex в CLR, которое заполняет экземпляр Person данными из объекта Flex (объект Flex фактически находится в потоке, поскольку объект Flex является делегирующим). Как и в случае сериализации, конвейер десериализации отвечает за создание экземпляра типа CLR, в отношении которого выполняется десериализация.

В дополнение к сериализации и десериализации может потребоваться преобразовать тип Person. В соответствии с вышесказанным форма объекта Person включает в себя два свойства: FirstName и LastName. Предположим, например, что одно приложение, использующее это определение Person, взаимодействует с другим приложением, использующим другое определение Person (например, Person с одним свойством FullName (Полное Имя)). Хотя одним из вариантов является предписание обоим приложениям использовать один и тот же тип Person, это не всегда может оказаться возможным (оба приложения могут быть уже написаны).

Согласно описываемому иллюстративному варианту осуществления можно создать средство сопряжения типов, которое преобразует форму экземпляра Person в одном приложении в форму, ожидаемую в другом приложении. Для выполнения этого преобразования (см. Фиг. 2) необходимо создать новое средство сопряжения типов для преобразования Flex во Flex (например, специализированная процедура 260 расширения) и поместить ее в конвейер сериализации после главного средства сопряжения типов для преобразования CLR во Flex (например, стандартной процедуры 250). Во время процесса сериализации на это средство сопряжения типов подается объект Flex, который осуществляет делегирование объекту Person. Средство сопряжения типов создает новый тип Flex другой формы (одно свойство FullName). На основе этого типа Flex создается новый объект, который сцепляет свой