Использование атрибутов для идентификации и отбора подключаемых выполняемых функций

Иллюстрации

Показать все

Изобретение относится к сетевым технологиям, в частности к области подключаемых выполняемых функций, расширяемых клиентских приложений. Техническим результатом является обеспечение функциональной совместимости подключаемых выполняемых функций. Способ включает: обнаружение программного модуля потребителя, сконфигурированного для потребления упомянутых функциональных возможностей, обнаружение модуля определения, причем модуль определения сконфигурирован для определения программного интерфейса для упомянутых функциональных возможностей и атрибута для объявления определения функциональных возможностей, которое соответствует упомянутым функциональным возможностям, обнаружение программного модуля производителя. Устанавливают связь между программным модулем потребителя и программным модулем производителя, чтобы программный модуль потребителя потреблял функциональные возможности, созданные программным модулем производителя. 4 н. и 16 з.п. ф-лы, 6 ил.

Реферат

Предупреждение об Авторском Праве и Разрешение

Часть описания изобретения этого патентного документа может содержать материал, который подпадает под охрану авторского права. Обладатель авторского права не имеет возражений на факсимильное воспроизведение кем-либо патентного документа или описания изобретения к патенту, когда это появляется в файлах с данными о патентах или в документации Патентного ведомства, но во всем остальном полностью сохраняет все авторские права. К данному документу должно применяться следующее уведомление: © Корпорация Майкрософт (Microsoft Corp.), 2005. Все права защищены.

Уровень техники

Программное обеспечение для установления связи между информацией, людьми, системами и устройствами, например Microsoft.NET (.NET), обеспечивает функциональную совместимость на базе Расширяемого языка разметки (XML - Extensible Markup Language) и в настоящее время совместимо с клиентскими, серверными, служебными приложениями и инструментальными средствами. Например, такие продукты, как Microsoft Windows®, и Microsoft Office® будут использовать .NET для установления связи с другими системами и приложениями. Для разработчиков программного обеспечения .NET проявляется в виде модели программирования, поставляемой в продукте Microsoft®.NET Framework. Эта интегрированная среда является встроенным компонентом Microsoft Windows®, который позволяет разрабатывать и запускать следующее поколение приложений и услуг Всемирной Паутины (Сети). Оно включает в себя технологии для сетевых услуг и сетевых приложений, доступа к данным, интеллектуальных клиентских приложений и многого другого.

Сетевые услуги вызываются по сети Интернет при посредстве стандартизированных протоколов производственной вычислительной сети, включающих в себя Простой Протокол Доступа к Объектам (SOAP - Simple Object Access Protocol), XML и технологию Универсального Описания, Поиска и Взаимодействия (UDDI - Universal Description, Discovery, and Integration). Они определяются через общественные организации стандартизации, такие как Консорциум Всемирной Паутины. SOAP представляет собой основанную на XML технологию передачи сообщений, стандартизированную Консорциумом Всемирной Паутины, которая устанавливает все необходимые правила для поиска сетевых услуг, интеграции их в приложения и установления связи между ними. UDDI представляет собой открытый реестр, предоставляемый бесплатно, где можно опубликовывать и запрашивать информацию о сетевых услугах. .NET включает в себя использование программных модулей с самоописанием, семантическое выделение в самостоятельные элементы отдельных выполняемых функций, входящих в стандартные протоколы связи сети Интернет и доступных посредством этих протоколов, таких как XML и SOAP.

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

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

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

Раскрытие изобретения

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

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

Другие преимущества и признаки настоящего изобретения описаны ниже.

Краткое Описание чертежей

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

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

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

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

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

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

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

Осуществление изобретения

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

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

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

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

Иллюстративная система для реализации аспектов настоящего изобретения включает в себя вычислительное устройство общего назначения в виде компьютера 241. Компоненты компьютера 241 могут включать в себя, но не ограничиваются этим, обрабатывающее устройство 259, системную память 222 и системную шину 221, которая соединяет различные системные компоненты, в том числе системную память и обрабатывающее устройство 259. Системная шина 221 может быть любого из нескольких типов шинных структур, включающих в себя шину памяти или устройство управления памятью, шину периферийных устройств и локальную шину, использующую любую из множества шинных архитектур. В качестве примера, но не ограничиваясь этим, такие архитектуры включают в себя шину архитектуры промышленного стандарта (ISA - Industry Standard Architecture), шину микроканальной архитектуры (MCA - Micro Channel Architecture), шину расширенной архитектуры промышленного стандарта (EISA - Enhanced ISA), локальную шину стандарта Ассоциации по стандартам в области видеоэлектроники (VESA - Video Electronics Standards Association) и шину соединения периферийных устройств (PCI - Peripheral Component Interconnect), также известную как шина расширения.

Компьютер 241 обычно включает в себя множество компьютерочитаемых носителей. Компьютерочитаемые носители могут быть любыми имеющимися в распоряжении носителями, к которым может получить доступ компьютер 241, и включают в себя и энергозависимые, и энергонезависимые носители, и съемные, и несъемные носители. В качестве примера, но не ограничиваясь этим, компьютерочитаемые носители могут содержать компьютерные запоминающие носители и носители передачи данных. Компьютерные запоминающие носители включают в себя и энергозависимые, и энергонезависимые, и съемные, и несъемные носители, реализованные любым способом или технологией хранения информации, такой как компьютерочитаемые инструкции, структуры данных, программные модули или другие данные. Компьютерные запоминающие носители включают в себя, но не ограничиваются этим, ОЗУ, ПЗУ, ЭСППЗУ, флэш-память или другую технологию памяти, компакт-диски (CD-ROM), цифровые диски универсального назначения (DVD) или другое запоминающее устройство на оптическом диске, магнитные кассеты, магнитную ленту, запоминающее устройство на магнитных дисках, или другие магнитные устройства хранения, или любой другой носитель, который может использоваться для хранения необходимой информации и к которому может получить доступ компьютер 241. Носители передачи данных обычно воплощают компьютерочитаемые инструкции, структуры данных, программные модули или другие данные в модулированном сигнале передачи данных, таком как несущая волна или другой транспортный механизм, и включают в себя любые носители для доставки информации. Термин "модулированный сигнал передачи данных" обозначает сигнал, у которого одна или более из его характеристик установлены или изменены таким образом, чтобы закодировать информацию в сигнале. В качестве примера, но не ограничиваясь этим, носители передачи данных включают в себя носители проводной среды, такой как проводная сеть или прямое проводное соединение, и носители беспроводной среды, такие как звуковые волны, радиочастоты, инфракрасное излучение и другие беспроводные среды. Комбинации любого из вышеупомянутого также должны входить в понятие компьютерочитаемых носителей.

Системная память 222 включает в себя компьютерный запоминающий носитель в виде энергозависимой и/или энергонезависимой памяти, такой как постоянное запоминающее устройство (ПЗУ) 223 и оперативное запоминающее устройство (ОЗУ) 260. Базовая система 224 ввода/вывода (БСВВ), содержащая основные процедуры, которые помогают передавать информацию между элементами внутри компьютера 241, например, во время запуска, обычно хранится в ПЗУ 223. ОЗУ 260 обычно содержит данные и/или программные модули, к которым обрабатывающее устройство 259 получает непосредственный доступ и/или которыми оно в настоящий момент оперирует. В качестве примера, но не ограничиваясь этим, Фиг.1 иллюстрирует операционную систему 225, прикладные программы 226, другие программные модули 227 и программные данные 228.

Кроме того, компьютер 241 может включать в себя другие съемные/несъемные энергозависимые/энергонезависимые компьютерные запоминающие носители. Только в качестве примера Фиг.1 иллюстрирует накопитель 238 на жестком диске, который осуществляет считывание или запись на несъемные, энергонезависимые магнитные носители, накопитель 239 на магнитном диске, который осуществляет считывание или запись на съемный, энергонезависимый магнитный диск 254 и накопитель 240 на оптическом диске, который осуществляет считывание или запись на съемный энергонезависимый оптический диск 253, такой как CD-ROM или другие оптические носители. Другие съемные/несъемные, энергозависимые/энергонезависимые компьютерные запоминающие носители, которые могут использоваться в иллюстративном операционном окружении, включают в себя, но не ограничиваются этим, кассеты с магнитной лентой, платы флэш-памяти, цифровые диски универсального назначения, ленту с цифровой видеозаписью, твердотельное ОЗУ, твердотельное ПЗУ и тому подобное. Накопитель 238 на жестком диске обычно подсоединяется к системной шине 221 при помощи интерфейса несъемного запоминающего устройства, такого как интерфейс 234, а накопитель 239 на магнитном диске и накопитель 240 на оптическом диске обычно подсоединяются к системной шине 221 посредством интерфейса съемного запоминающего устройства, такого как интерфейс 235.

Накопители и связанные с ними компьютерные запоминающие носители, обсуждаемые выше и проиллюстрированные на Фиг.1, обеспечивают хранение компьютерочитаемых инструкций, структур данных, программных модулей и других данных для компьютера 241. На Фиг.1, например, накопитель 238 на жестком диске проиллюстрирован как хранящий операционную систему 258, прикладные программы 257, другие программные модули 256 и программные данные 255. Заметим, что эти компоненты могут или совпадать, или отличаться от операционной системы 225, прикладных программ 226, других программных модулей 227 и программных данных 228. Операционной системе 258, прикладным программам 257, другим программным модулям 256 и программным данным 255 в данном описании присвоены другие ссылочные значения, чтобы пояснить, что, как минимум, они являются другими копиями. Пользователь может вводить команды и информацию в компьютер 241 при помощи устройств ввода, таких как клавиатура 251 и координатно-указательное устройство 252, обычно именуемое как мышь, шаровой манипулятор или сенсорная панель. Другие устройства ввода (не показаны) могут включать в себя микрофон, рычажный указатель, игровой планшет, антенну спутниковой связи, сканирующее устройство или тому подобное. Эти и другие устройства ввода часто соединяются с обрабатывающим устройством 259 при помощи интерфейса 236 пользовательского ввода, который подсоединяется к системной шине, но могут соединяться посредством других интерфейса и шинных структур, таких как параллельный порт, игровой порт или универсальная последовательная шина (USB - universal serial bus). Монитор 242 или другой тип устройства отображения также соединяется с системной шиной 221 через интерфейс, такой как видеоинтерфейс 232. В дополнение к монитору компьютеры могут также включать в себя другие периферийные устройства вывода, такие как динамики 244 и устройство 243 печати, которые могут быть подсоединены при помощи интерфейса 233 периферийных устройств вывода.

Компьютер 241 функционирует в сетевом окружении, используя логические соединения с одним или более удаленными компьютерами, такими как удаленный компьютер 246. Удаленный компьютер 246 может быть персональным компьютером, переносным устройством, обслуживающим компьютером, маршрутизатором, сетевым ПК, равноправным устройством или другим публичным сетевым узлом и, как правило, включает в себя многие или все элементы, описанные выше касательно компьютера 241, несмотря на то, что на Фиг.1 проиллюстрировано только запоминающее устройство 247 хранения. Логические соединения, изображенные на Фиг.1, включают в себя локальную вычислительную сеть (ЛВС) 245 и глобальную вычислительную сеть (ГВС) 249, но могут также включать в себя другие сети. Такие сетевые окружения являются обычными в офисах, корпоративных вычислительных сетях, внутренних сетях и глобальной сети на базе технологии Интернет.

При использовании в сетевом окружении ЛВС компьютер 241 соединяется с ЛВС 245 при помощи сетевого интерфейса или адаптера (сопрягающего устройства) 237. При использовании в сетевом окружении ГВС компьютер 241, как правило, включает в себя модем 250 или другое средство для установления связи по ГВС 249, такой как Интернет. Модем 250, который может быть внутренним или внешним, может подсоединяться к системной шине 221 через интерфейс 236 пользовательского ввода или по другой подходящей схеме. В сетевом окружении программные модули, изображенные касательно компьютера 241, или их части могут храниться на удаленном запоминающем устройстве хранения. В качестве примера, но не ограничиваясь этим, Фиг.1 иллюстрирует удаленные прикладные программы 248 как постоянно хранящиеся на устройстве 247 хранения. Нужно понимать, что показанные сетевые соединения являются иллюстративными и может использоваться другое средство установления соединения между компьютерами.

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

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

С учетом разнообразных вычислительных сред, которые могут быть сформированы согласно общей структуре, предоставленной на Фиг.1, системы и способы, предоставляемые в настоящем описании, не могут рассматриваться как ограниченные как-либо конкретной вычислительной архитектурой. Вместо этого настоящее изобретение не должно ограничиваться каким-либо отдельным вариантом осуществления, а скорее должно рассматриваться в широте и объеме в соответствии с прилагаемой формулой изобретения.

Интегрированная среда, система и процессы предоставляются и описываются в настоящем описании на основе идеи использования атрибутов Microsoft®.NET (.NET) для информирования о точках интегрирования и телах программного кода, которые соответствуют им. Однако использование атрибутов Microsoft.NET предусматривается в настоящем описании как часть примерного варианта осуществления и, следовательно, другие системы, интегрированные среды и/или платформы, которые обеспечивают атрибуты, до некоторой степени подобно тому, как в программном обеспечении Microsoft.NET, могут использоваться таким же образом.

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

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

Обратимся далее к Фиг.2, изображено графическое представление, иллюстрирующее, как при использовании атрибутов для идентификации и отбора подключаемых выполняемых функций программные модули объединяются друг с другом путем производства и потребления выполняемых функций, которые удовлетворяют общему определению. Концепция является частью композиционной модели для крупных расширяемых приложений. В этой модели приложения создаются модульным способом. Модули 262, 264, 268 объединяются друг с другом, производя и потребляя выполняемые функции, которые удовлетворяют общему определению, через прямые зависимости 272 в модуле 262 определения. Модули 268 производителя и модули 264 потребителя остаются независимыми друг от друга и связываются вместе косвенно 270 через модуль 262 определения, как показано на Фиг.2.

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

Ниже описывается механизм, с помощью которого загрузчик выполняет эти задачи. Атрибуты .NET используются для идентификации различных кодовых артефактов (таких, как классы, методы, свойства и т.д.) как являющихся определениями, производствами и/или потреблениями выполняемых функций. Эти атрибуты исследуются загрузчиком модуля и используются для создания взаимосвязей между установленными по отдельности модулем 268 производителя и модулем 264 потребителя. Ниже описаны два примера реализации.

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

Служебные определения присутствуют в модулях 262 определения и идентифицируются загрузчиком 304 модуля через отражение, обнаруживая определения класса атрибутов, которые удовлетворяют вышеупомянутым критериям (снабженные определенным ключом вследствие существования атрибута, который идентифицирует тип служебного объекта). Затем модули 268 производителя обеспечивают реализации типа служебного объекта ("служебные объекты") через свойства, которые статически подставляются из классов, которые несут системный атрибут, идентифицирующий их как классы 308 "служебного производителя", возвращают экземпляры типа служебного объекта и несут служебный атрибут, поставляя соответствующие данные для свойств этого атрибута, который описывает эту продукцию.

Загрузчик 304 модуля выявляет такие свойства через отражение, обнаруживая присутствие служебного атрибута в свойстве служебного класса производителя. Экземпляр служебного атрибута, который сопутствует каждому такому свойству, становится доступным потребителям этих служебных объектов, а также используется загрузчиком 304 модуля для сравнения при соответствии зависимостям, объявленным потребителями. Модули 264 потребителя указывают свое желание использовать служебные объекты, определяя классы ("служебные фабрики") 306, которые обеспечивают доступ к служебным объектам. Эти классы 306, которые обеспечивают доступ к служебным объектам, наследуют от системного базового класса, который параметризуется типом служебного атрибута и типом служебного объекта и при желании дополнен служебным атрибутом. Служебный атрибут объявляет зависимость от производителей, чьи экземпляры служебных атрибутов соответствуют тем, которые задаются служебной фабрикой 306.

Потребитель 264 создает экземпляр служебной фабрики 306, который подставляет свойство, которое возвращает экземпляр служебного атрибута, описывающего производителя 268, а также метод, который задействует служебное свойство продукции производителя. Реализация этого метода встроена в системный основной фабричный класс, который использует загрузчик 304 модуля, принимая к сведению установленные модули, чтобы знать, какой модуль 268 производителя загружать и вызывать для создания служебного объекта. Выбор модуля 268 производителя определяется, исходя из значения экземпляра служебного атрибута, заданного фабрикой. Точно так же потребитель может создать фабрику мультипроизводителя ("служебный брокер"), которая работает точно так же, как служебная фабрика 306, за исключением того, что она представляет продукции одного и того же типа служебного объекта.

Обратимся далее к Фиг.4, где изображено графическое представление, иллюстрирующее последовательность выполнения во втором примере реализации производства/потребления в соответствии с программными модулями, которые объединяются друг с другом путем производства и потребления выполняемых функций, которые удовлетворяют общему определению. Выполняемые функции, которые будут произведены/потреблены, определяются в этой второй реализации с помощью класса, называемого "порт" (Port) 403. Компоненты выполняемых функций, которые удовлетворяют определениям порта, называют "содействиями" 407. Содействие 407 содержит статический метод, которому сопутствуют метаданные 412. Эти метаданные, по меньшей мере, содержат идентификацию типа порта, который определяет содействие 409. Порт 403 является определением класса который наследует от системного базового класса 404, дополняется системным атрибутом, идентифицирующим его как определение 411 порта, наряду с нулем или большим количеством системных атрибутов 408, которые могут использоваться для установления соответствия метаданных с соответствующими содействиями, и содержит метод ("сигнатурный метод") (signature method) 413. Сигнатурный метод вызывает метод содействия через выполняемые функции из базового класса и определяет сигнатуру метода для содействий, определенных этим портом. Содействие 407 содержит метод, который соответствует сигнатурному методу 413 класса 403 порта и метаданным 412, связанным с этим методом, объявленным с использованием атрибутов 408, идентифицированных классом 403 порта.

Экземпляр класса 403 порта представляет ровно одно содействие 407, удовлетворяющее определению этого порта 403. Потребители получают экземпляры класса 403 порта от загрузчика 304 модуля с использованием системных объектов-распределителей (Dispenser), хранящихся в определенных атрибутивных полях. Загрузчик 304 модуля наполняет эти объекты-распределители во время загрузки экземплярами порта, которые соответствуют информации зависимости, объявленной в атрибутах, помещенных в полях. Потребители могут выполнять итерации по экземплярам порта из распределителей, исследовать метаданные из каждого содействия и вызывать метод содействия.

Фиг.4 иллюстрирует последовательность выполнения, задействованную в типичной продукции/потреблении, используя данный второй пример реализации. Фиг.4 показывает "единственный распределитель" 410, причем число возможных соответствий содействий ограничено единицей, исходя из метаданных, задаваемых на распределителе 410. В частности, этот распределитель 410 запрашивает, как пример, содействие "GizmoCreator" 402, для которого название марки (Brand Name) определено как "X" 412 415. Содействия с другими названиями марки не представлены, и это является ошибкой конфигурации, если присутствует больше чем одно содействие с названием марки, равным "X".

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

Пример реализации в контексте композиционной модели для крупных расширяемых приложений

Модульность признается важным аспектом разработки больших систем. Надежное проектирование расширяемых приложений подразумевает не только разделение выполняемых функций на модули, но и также требует простого, непротиворечивого и открытого шаблона взаимодействия, который специально разработан, чтобы способствовать полной расширяемости. Композиционная модель предписывает и приводит в исполнение такую модульность и шаблоны взаимодействия. Модульность, изложенная в настоящем описании, не создает границ для локализации типов или обращения к задачам управления версиями. Напротив, она является способом создания модульного, расширяемого кода там, где иначе пришлось бы формировать единый код. Модель находится на уровне типов CLR (Common Language Runtime - общеязыковая исполняющая среда), взаимодействующих через методы и с