СРЕДСТВА СОПРЯЖЕНИЯ ТИПОВ
AGENTS OF TYPES INTERFACING

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 сопряжения типов допустимы следующие преобразования:
<b>Входной тип</b>
<b>Выходной тип</b>
<b>Описание</b>
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 создается новый объект, который сцепляет свойства FirstName и LastName исходного объекта Flex (который также представляет экземпляр Person). Этот объект Flex подается в главное средство сопряжения типов для преобразования Flex в Infoset (например, стандартную процедуру 270), которое выполняет сериализацию одного свойства вместо двух. Следует отметить, что на самом деле упомянутое сцепление можно не выполнять до тех пор, пока средство сопряжения типов для преобразования Flex в Infoset не запросит значение нового свойства FullName. Соответственно преобразование откладывается до создания объекта Infoset или целевого объекта.
Соответственно средство сопряжения типов, соответствующее настоящему изобретению, может обеспечить расширяемую архитектуру для преобразований между системами и типами, включая поддержку подключаемых преобразований типов и данных, поддержку изменяемых типов и объектов, поддержку подключаемых систем типов схем, поддержку подключаемых форматов данных и т.п.
Настоящее изобретение также можно описать в терминах способов, содержащих функциональные этапы и нефункциональные действия. Ниже приводится описание действий и этапов, которые можно осуществить при практическом применении настоящего изобретения. Обычно функциональные этапы описывают изобретение в терминах достигнутых результатов, в то время как нефункциональные действия описывают более специфические действия для достижения конкретного результата. Хотя функциональные этапы и нефункциональные действия можно описать или заявить в конкретном порядке, не подразумевается, что настоящее изобретение обязательно ограничено конкретным порядком или комбинацией действий и/или этапов.
На Фиг. 5А-5В показаны иллюстративные действия и этапы для способов сериализации и десериализации объектов согласно настоящему изобретению, которые могут включать в себя действие (512) приема исходного объекта исходного типа для обработки средством сериализации во время выполнения. Этап (520) идентификации информации о типе в отношении исходного объекта может включать в себя действие (522) приема информации о типе. Информация о типе может быть предоставлена в качестве метаданных, ассоциированных с управляемым кодом. Этап (530) преобразования исходного объекта в промежуточное представление на основе информации об исходном типе может включать в себя действия формирования (не показано) промежуточного представления на основе информации о типе и вызова (534) одной или более стандартных процедур для изменения промежуточного представления. Упомянутые одна или более процедур расширения вносят изменения в работу средства сериализации во время выполнения.
Следует отметить, что промежуточное представление может содержать имя объекта, тип объекта и/или данные объекта. Хотя это не показано, этап (540) изменения промежуточного представления может дополнительно включать в себя действия вызова (не показан) одной или более специализированных процедур расширения и вызова (не показан) одной или более стандартных процедур для изменения промежуточного представления. Этап (540) изменения может дополнительно включать в себя действие (542) изменения имени, типа и/или данных объекта. Этап (550) откладывания изменения может включать в себя действие (552) задания того, каким образом изменять промежуточное представление без фактического изменения промежуточного представления. Откладывание может содействовать снижению требований к буферизации и обработке, которые, в противном случае, имеют место при изменении промежуточного представления.
Этап (560) преобразования промежуточного представления исходного объекта в целевой объект целевого типа или формата может включать в себя следующие действия. В случае сериализации (563) этот этап может включать в себя действие (565) создания или формирования конечного объекта. В одном вышеописанном иллюстративном варианте осуществления целевой объект форматирован в соответствии с XML для транспортировки. Следовательно, создание или формирование (565) целевого объекта может включать в себя формирование соответствующего представления XML и запись целевого объекта в поток. В качестве альтернативы целевой объект может быть отформатирован для сохранения на диске или в соответствии с любым другим форматом, подходящим для представления сериализованного исходного объекта. В случае десериализации (564) этот этап может включать в себя действия создания (566) экземпляра целевого объекта и его заполнения (568). Во время этапа (560) преобразования специализированные и стандартные процедуры вызываются для любых отложенных изменений, для которых указано, каким образом следует осуществить изменение, но сами изменения фактически не выполнены.
Варианты осуществления в рамках объема настоящего изобретения также включают в себя машиночитаемый носитель для хранения на нем машиноисполняемых команд или структур данных. Такой машиночитаемый носитель может представлять собой любой доступный носитель, к которому компьютер общего или специального назначения может осуществить доступ. В качестве примера, но не ограничения, такой машиночитаемый носитель может представлять собой ОЗУ, ПЗУ, электрически стираемое перепрограммируемое ПЗУ (EEPROM), ПЗУ на компакт-диске (CD-ROM) или другой носитель в виде оптического диска, носитель в виде магнитного диска или другие магнитные запоминающие устройства, либо любой другой носитель, который можно использовать для хранения необходимых средств программного кода в форме машиноисполняемых команд или структур данных и к которому компьютер общего назначения или специального назначения может осуществить доступ. Когда информация пересылается или передается через сеть или другое коммуникационное соединение (либо проводное, беспроводное, либо комбинацию проводного и беспроводного) на компьютер, компьютер адекватно воспринимает это соединение как машиночитаемый носитель. Таким образом, любое подобное соединение также относится к машиночитаемым носителям. Комбинации вышеперечисленных носителей и соединений также попадают в диапазон машиночитаемых носителей. Машиноисполняемые команды содержат, например, команды и данные, которые предписывают компьютеру общего назначения, компьютеру специального назначения или устройству обработки данных специального назначения выполнить определенную функцию или набор функций.
Фиг. 6 и нижеследующее описание предназначены для предоставления краткого общего описания подходящей вычислительной среды, в которой можно реализовать настоящее изобретение. Хотя это не является жестким требованием, изобретение будет описано в общем контексте машиноисполняемых команд, таких как программные модули, выполняемые компьютерами в сетевой среде. В общем случае программные модули включают в себя процедуры, программы, объекты, компоненты, структуры данных и т.п., которые выполняют конкретные задачи или реализуют определенные абстрактные типы данных. Машиноисполняемые команды, ассоциированные структуры данных и программные модули представляют примеры средств программного кода, предназначенных для выполнения этапов раскрытых здесь способов. Конкретная последовательность таких исполняемых команд или ассоциированных структур данных представляет примеры соответствующих действий для реализации функций, описанных на таких этапах.
Специалисты в данной области техники оценят тот факт, что изобретение можно реализовать на практике в сетевых вычислительных средах с многими типами конфигураций компьютерных систем, включая персональные компьютеры, карманные устройства, многопроцессорные системы, программируемую бытовую электронику или бытовую электронику на основе микропроцессоров, сетевые персональные компьютеры, миникомпьютеры, универсальные компьютеры и т.п. Изобретение также можно реализовать на практике в распределенных вычислительных средах, где задачи выполняются локальными и удаленными устройствами обработки данных, которые связаны (либо посредством проводных линий связи, беспроводных линий связи, либо посредством комбинации проводных и беспроводных линий связи) через сеть связи. В распределенной вычислительной среде программные модули можно размещать как в локальных, так и в удаленных запоминающих устройствах.
Согласно фиг. 6 иллюстративная система для реализации изобретения включает в себя вычислительное устройство общего назначения в виде обычного компьютера 620, содержащего процессор 621, системную память 622 и системную шину 623, которая подключает различные компоненты системы, включая системную память 622, к процессору 621. Системная шина может относиться к любой из нескольких шинных структур, включая шину памяти или контроллер памяти, периферийную шину и локальную шину, использующих любую из множества шинных архитектур. Системная память 622 включает в себя постоянную память (ПЗУ) 624 и оперативную память (ОЗУ) 625. Базовая система 626 ввода/вывода (BIOS), содержащая основные процедуры, помогающие переносить информацию между элементами персонального компьютера 620, например, при запуске, хранится в ПЗУ 624.
Компьютер 620 может также содержать накопитель 627 на жестких магнитных дисках для считывания с магнитного жесткого диска 639 и записи на него, привод 628 магнитного диска для чтения со сменного магнитного диска 629 или записи на него, и привод 630 оптического диска для чтения со сменного оптического диска 631, такого как CD-ROM или другой оптический носитель, или записи на него. Накопитель 627 на жестких магнитных дисках, привод 628 магнитного диска и привод 630 оптического диска подключены к системной шине 623 посредством интерфейса 632 накопителя на жестких магнитных дисках, интерфейса 633 привода магнитного диска и интерфейса 634 привода оптического диска соответственно. Приводы и соответствующие им машиночитаемые носители обеспечивают энергонезависимые запоминающие устройства компьютера 620 для хранения машиноисполняемых инструкций, структур данных, программных модулей и других данных. Хотя в описанном предпочтительном варианте осуществления используется магнитный жесткий диск 639, сменный магнитный диск 629 и сменный оптический диск 631, можно использовать и другие типы машиночитаемых носителей, например магнитные кассеты, карты флэш-памяти, универсальные цифровые диски, картриджи Бернулли, ОЗУ, ПЗУ и т.п.
Средства программного кода, включающие в себя один или несколько программных модулей, могут храниться на жестком диск 639, магнитном диске 629, оптическом диске 631, в ПЗУ 624 или ОЗУ 625, включая операционную систему 635, одну или более прикладных программ 636, другие программные модули 637 и данные 638 программ. Пользователь может вводить команды и информацию в персональный компьютер 620 через клавиатуру 640, указательное устройство 642 или другие устройства ввода (не показаны), такие как микрофон, джойстик, игровая панель, спутниковая антенна, сканер и т.п. Для подключения этих и других устройств ввода к процессору 621 обычно используется интерфейс 646 последовательного порта, подключенный к системной шине 623. В качестве альтернативы устройства ввода могут быть подключены через другие интерфейсы, такие как параллельный порт, игровой порт или универсальная последовательная шина (USB). Монитор 647 или устройство отображения другого типа также подключен к системной шине 623 через интерфейс, например, видеоадаптер 648. Помимо монитора персональные компьютеры обычно включают в себя другие периферийные устройства вывода (не показаны), например громкоговорители или принтеры.
Компьютер 620 может работать в сетевой среде, используя логические соединения с одним или несколькими удаленными компьютерами, например удаленными компьютерами 649а и 649b. Каждый из удаленных компьютеров 649а и 649b может представлять собой другой персональный компьютер, сервер, маршрутизатор, сетевой персональный компьютер, одноранговое устройство или другое общее сетевое устройство и обычно включает в себя многие или все элементы, описанные применительно к персональному компьютеру 620, хотя на Фиг. 6 изображены только запоминающие устройства 650а и 650b и ассоциированные с ними прикладные программы 636а и 636b. Логические соединения, показанные на Фиг. 6, включают в себя локальную сеть (ЛС) 651 и глобальную сеть (ГС) 652, которые приведены здесь в качестве примера, а не ограничения. Такие сетевые среды обычно имеют место в компьютерных сетях масштаба офиса или предприятия, интрасетях и сети Интернет.
При использовании сетевой среды ЛС персональный компьютер 620 подключен к ЛС 651 через сетевой интерфейс 653. При использовании в сетевой среде ГС персональный компьютер 620 обычно содержит модем 654 или иное средство установления связи через ГС 652, такую как Интернет. Модем 654, который может быть внутренним или внешним, подключен к системной шине 623 через интерфейс 646 последовательного порта. В сетевой среде программные модули, указанные применительно к компьютеру 620, или некоторые из них могут храниться в удаленном запоминающем устройстве. Следует понимать, что показанные сетевые соединения носят иллюстративный характер и что можно использовать другие средства установления линий связи через глобальную сеть 652.
Настоящее изобретение можно воплотить в других специфических формах, не отходя от его сущности или существенных признаков. Описанные варианты осуществления во всех отношениях следует рассматривать лишь как иллюстративные, но не ограничивающие. Следовательно, объем изобретения определяется прилагающейся формулой изобретения, а не вышеприведенным описанием. Все изменения, осуществляемые в рамках замысла и диапазона эквивалентов, соответствующих представляемой формуле изобретения, находятся в пределах объема, определяемого представляемой формулой изобретения.