Платформа .NET состоит из пяти основных компонентов, как показано на рис. 1.1. На самом нижнем уровне находится операционная система (ОС), которая может быть одной из нескольких Windоws-платформ, включая Windows ХР, Windows 2000, Windows Me и Windows СЕ. Как часть стратегии .NET, Microsoft обещает предоставить программное обеспечение для других .NЕТ-устройств, чтобы способствовать появлению нового поколения «умных» устройств.
Рис. 1.1. Платформа Мiсrоsоft .NET
Поверх операционной системы функционирует серия продуктов .NET Enterprise Servers, сокращающих время, требуемое для разработки крупномасштабных бизнес-систем. Эти серверные продукты включают Application Center 2000, ВizTalk Server 2000, Commerce Server 2000, Exchange Server 2000, Host Integration Server 2000, Internet Security Acceleration Server 2000 и SQL Server 2000.
Поскольку веб-сервисы могут активно применяться через Интернет, Мicrosoft планирует предоставить сервисы, являющиеся строительными блоками, которые разработчики приложений смогут использовать за плату. Примером такого сервиса является Мiсrоsоft Passport, позволяющий установить единое имя пользователя и пароль на всех сайтах, поддерживающих аутентификацию через Passport.
На верхнем уровне архитектуры .NET находится совершенно новое средство разработки под названием Visual Studio.NET (VS.NET), которое делает возможным быструю разработку веб-сервисов и других приложений. Преемник Visual Studio 6.0, VS.NET, представляет собой интегрированную среду разработки (Integrated Development Environment, IDE), поддерживающую четыре различных языка и такие средства, как межъязыковая отладка и редактор XМL-cxем (XML Schema Editor).
А в центре .NET располагается Мiсrоsоft .NET Framework - основной предмет нашего рассмотрения и новая инфраструктура разработки и исполнения, которая изменит создание бизнес-приложений на платформе Windows. Она включает общеязыковую среду выполнения Common Language Runtime (CLR) и общую структуру классов, которые могут использоваться всеми языками .NET.
Цели разработки .NET Framework
При разработке .NET Framework Microsoft преследовала много практических и исключительно амбициозных целей. Главные задачи разработки Мicrosoft .NET Framework включают в себя улучшенную поддержку компонентов, межъязыковую интеграцию, обеспечение взаимодействия приложений через киберпространство, простую разработку и развертывание, улучшенную надежность и повышенную безопасность.
Компонентная инфраструктура
До появления технологии СОМ разработчики, использующие средства Мicrosoft, не имели простого способа интеграции бинарных библиотек без ссылки на их исходный код или без его изменения. С введением СОМ программисты смогли интегрировать бинарные компоненты в свои приложения, аналогично аппаратным компонентам plug-and-play. Хотя технология СОМ была хороша, неприятные детали ее применения были источником массы неприятностей для разработчиков и администраторов.
Хотя СОМ позволяет интегрировать бинарные компоненты, разработанные с использованием любого языка, эта технология требует соблюдения правил идентификации, времени жизни и двоичной структуры СОМ. Необходимо также писать код «заплаток», требуемых для создания СОМ-компонента, таких как DllGetClassObject, CoRegisterClassObject и т. д.
Понимая, что эти требования приводят к частому повторному написанию схожего кода, .NET решается избавиться от них. В мире .NET все классы готовы к использованию на двоичном уровне. Нет необходимости в написании дополнительного «заплаточного» кода для поддержки компонентного представления объекта в .NET Framework. Вы просто пишете класс .NET, который затем становится частью сборки (сборку мы обсудим немного позже) и поддерживает plug-and-play.
Кроме предоставления среды, облегчающей разработку, .NET устраняет трудности создания СОМ-компонентов. В частности, в .NET не требуется изменять реестр для регистрации компонентов и исключается необходимость в обязательном дополнительном коде, присутствующем во всех СОМ-компонентах, включая код для поддержки интерфейса IUnknown, фабрик классов, времени жизни компонента, регистрации, динамического связывания и прочего.
«СОМ-компонент» (или просто «компонент») – двоичный модуль, такой как DLL или ЕХЕ.
Языковая интеграция
СОМ поддерживает языковую независимость (laпguage iпdepeпdeпce), означающую, что вы можете разрабатывать СОМ-компонент на любом языке. При условии, что ваш компонент соответствует правилам, изложенным в спецификации СОМ, можно создать его экземпляр и использовать его в своих приложениях. Поддерживая, таким образом, двоичное взаимодействие, технология СОМ не поддерживает языковую интеграцию (language integration). Другими словами, вы не можете использовать код СОМ-компонентов, написанных кем-то другим, не можете также расширить класс, заключенный в СОМ-компоненте, перехватывать исключения, вызываемые кодом СОМ-компонента, и т. д.
Мiсrоsоft .NET поддерживает не только языковую независимость, но и языковую интеграцию. Это означает, что (не)возможно наследовать от классов, перехватывать исключения и использовать преимущества полиморфизма между разными языками. .NET Framework делает это возможным с помощью системы общих типов - спецификации под названием Common Туре System (CTS), которую должны поддерживать все .NЕТ-компоненты. Например, ВСЕ в .NET является объектом определенного класса, производного от корневого класса System.Object. CTS поддерживает общую концепцию классов, интерфейсов, делегатов (обеспечивающих поддержку обратных вызовов), ссылочных типов и типов значений. В базовых классах .NET представлено большинство базовых системных типов, таких как классы для поддержки целых значений, строк и манипуляций с файлами. Поскольку компилятор любого языка должен соответствовать минимальному набору правил, оговоренных в Common Language Specification (CLS), и генерировать код, согласующийся с CTS, различные языки в .NET могут общаться между собой.
Взаимодействие компонентов через Интернет
СОМ поддерживает распределенные вычисления через свой протокол взаимодействия Distributed СОМ (DCOM). Проблема с DCOM состоит в том, что он вставляет IP-aдpec хоста в буфер Network Data Representation (NDR), таким образом, DCOM не работает через брандмауэры и программное обеспечение, осуществляющее трансляцию сетевых адресов(Network Address Translation, NAT). Кроме того, средства динамической активации, согласования протоколов и сборки мусора закрыты, сложны и дороги. Решением является открытый, простой и экономичный протокол распределенных вычислений. .NET Framework использует поддержанный компьютерной отраслью протокол SOAP (Simple Object Access Protocol, простой протокол доступа к объектам), базирующийся на широко распространенных стандартах XML и НТТР.
Упрощение разработки
Те, кто разрабатывал программное обеспечение для Windоws-платформ с момента их появления, видел все, начиная от Windows АРI и заканчивая Мiсrоsоft Foundation Classes (MFC), Active Template Library (ATL), системными СОМ-интерфейсами и несчетным числом оболочек, таких как Visual InterDev, Visual Basic, JScript и других языков сценариев. Каждый раз тому, кто собирался разрабатывать что-нибудь при помощи другого компилятора, приходилось изучать новый АРI или библиотеку классов, поскольку между всеми этими библиотеками или интерфейсами не существовало никакого соответствия или унификации.
Решение .NET представляет собой набор базовых классов и позволяет работать с ними любому языку. Такая среда исключает необходимость в изучении нового API при каждом «переключении» между языками. Другими словами, наверняка проще разобраться с десятком методов определенного класса, чем изучать тысячу функций API.
Упрощение развертывания приложений
Представьте себе следующий сценарий: ваше Windоws-приложение, использующее три разделяемые DLL-библиотеки, прекрасно работает многие месяцы, однако перестает работать на следующий день после того, как вы установили другой программный пакет, переписавший первую DLL, ничего не сделавший со второй DLL и записавший дополнительную копию третьей в другой каталог. Эта ситуация называется попаданием в ад DLL (DLL Hell).
Чтобы избежать DLL Неll (по крайней мере, для системных DLL), Windows 2000 сохраняет системные DLL в кэше. Если вы устанавливаете приложение, которое переписывает системные DLL, Windows 2000 заменит новые системные DLL исходными версиями из кэша.
Мicrosoft .NET еще более уменьшает проблему DLL Hell. В среде .NET ваш исполняемый файл будет использовать ту общую DLL, с которой он был собран. Это гарантируется тем, что общая DLL регистрируется в чем-то вроде кэша Windows 2000, который называется глобальным кэшем сборок (Global Assembly Cache, GAC). Кроме выполнения этого требования общая DLL должна иметь уникальные хеш-код, открытый ключ, региональный код и номер версии. Если эти требования выполнены и ваша общая DLL зарегистрирована в GAC, ее физическое имя перестает иметь значение. Другими словами, если у вас есть две версии DLL, обе под именем М yDll.dll, то они могут располагаться и исполнятся на одной и той же системе, не вызывая проблем. Это становится возможным потому, что исполняемый файл, использующий одну из этих DLL, жестко привязывается к DLL при компиляции.
Кроме искоренения DLL Неll, .NET также исключает необходимость настройки реестра, относящейся к компонентам. Разработчик СОМ расскажет вам, что половина сложностей в изучении СОМ состоит в необходимости знать специфичные для СОМ записи реестра, за которые отвечает программист. Мiсrоsоft .NET хранит все ссылки и зависимости сборок в специальной секции, называющейся манифестом(maпifest). Кроме того, сборки могут быть как закрытыми, так и общими. Закрытые сборки находятся по логическим путям или конфигурационным ХМL-файлам, а общие сборки регистрируются в GAC; в обоих случаях система находит требуемые вам файлы на этапе выполнения приложения. Если файлы отсутствуют, вы получите исключение, сообщающее о том, что случилось.
И наконец, в .NET возвращается концепция установки и удаления приложений без каких-либо усилий. Эта концепция является противоположностью тому, с чем вам приходилось иметь дело в мире СОМ. Для установки СОМ-приложения вы должны были зарегистрировать все компоненты после копирования их на свой компьютер. Если вы выполнили этот этап неверно, ничего не будет работать, и вам останется только рвать на себе волосы. Аналогично, чтобы удалить приложение, вам придется аннулировать регистрацию ваших компонентов(удалить записи в реестре) перед тем, как удалить файлы. И опять же, если вы неправильно выполните этот этап, в реестре останутся следы, которые будут существовать вечно.
В отличие от СОМ, для установки приложения в .NET вам достаточно просто выполнить команду хсору, чтобы скопировать файлы из одного каталога на CD в другой каталог на вашем компьютере, и приложение сможет запуститься автоматически (это верно для закрытых, но не для общих). Аналогично, для удаления приложения с вашего компьютера достаточно просто удалить каталог.
Надежность
В индустрии коммерческого программного обеспечения существует много языков программирования и платформ, однако в немногих из них делается попытка предоставить как надежный язык программирования, так и устойчивую библиотеку времени выполнения или инфраструктуру. Наиболее успешным языком, из тех, что мы видели среди коммерческого ПО, является язык JavaTM и Java Virtual MachineTM, которые были с радостью приняты сообществом разработчиков ПО. Мiсrоsоft позиционирует .NET как следующий большой шаг вперед.
В Мiсrоsоft .NET безопасность типов является обязательной. В отличие от С++, любой класс в .NET является производным от прародителя всех классов, Object, поддерживающего средства идентификации типов во время выполнения, средства построения дампа содержимого и прочие возможности. CLR должна распознать и проверить типы до того, как они смогут быть загружены и выполнены. Это сокращает возможности возникновения элементарных программистских ошибок и предотвращает переполнение буферов, ослабляющее безопасность.
Традиционные языки программирования не предоставляют общего механизма обработки ошибок. С++ и Java поддерживают обработку исключений, однако многие другие языки о вас не заботятся, вынуждая изобретать собственные средства. Мicrosoft .NET поддерживает исключения на уровне CLR, предоставляя согласованный механизм обработки ошибок. Другими словами, исключения работают во всех языках, совместимых с .NET.
Программируя на С++, вы должны освобождать все расположенные в куче объекты, которые были ранее созданы. Если этого не сделать, выделенные вашей системой ресурсы никогда не будут возвращены обратно, даже если они больше не требуются. И если это серверное приложение, оно не будет надежным, поскольку накопленные в памяти неиспользуемые ресурсы со временем могут привести к краху системы. Аналогично, Java во время выполнения .NET отслеживает и выполняет сборку мусора для всех созданных в памяти объектов, которые более не требуются.
Безопасность
в старые добрые времена DOS разработчики Microsoft, создавая приложения, мало беспокоились о безопасности, так как приложения работали на одиночном настольном компьютере с одним потоком выполнения. Как только разработчики начали создавать клиентские и серверные приложения, все усложнилось: к серверам могли обращаться несколько пользователей, а клиент и сервер обменивались друг с другом важной информацией. Проблема еще более усилилась в среде Интернета, так как существует опасность незаметно загрузить и выполнить на своей машине злонамеренный апплет.
Чтобы смягчить эти проблемы, .NET предоставляет ряд средств безопасности. Windows NT и Windows 2000 защищают ресурсы с помощью списков управления доступом и идентификаторов безопасности, однако не предоставляют инфраструктуру безопасности для проверки прав доступа к отдельным частям исполняемого кода. В отличие от традиционной поддержки безопасности, при которой защищается только доступ к исполняемому файлу, .NET идет дальше и позволяет защитить доступ к определенным частям исполняемого кода. Например, чтобы воспользоваться преимуществами декларативной проверки безопасности, вы можете указать в реализации ваших методов атрибуты безопасности и не писать дополнительный код. Чтобы воспользоваться императивными проверками, в методе пишется код для явного осуществления проверки безопасности. .NET предоставляет много других функций безопасности, чтобы усложнить несанкционированное проникновение в ваше приложение и систему.
Комментариев нет:
Отправить комментарий