Углубление в C# - .NET и распределенные приложения
ОГЛАВЛЕНИЕ
Хейлсберг: Есть одна вещь, касающаяся всей платформы .NET, и в частности C#. Это вопрос о создании распределенных приложений. Не так давно мы создавали связанные клинт-сервер приложения и объектные протоколы, такие как CORBA, IIOP, RMI, и пришедший позже DCOM. Такой тип программирования действительно подкрепляется EJB, реализующим основу для CORBA и RMI. Мы научились создавать эти хорошо связанные распределенные системы, но они не распространяемы. Они не распространяются по Web, так как они занимают свое место на сервере, и вы не можете просто переписать их на другой компьютер, положить их там и тем самым получить работающие копии.
Когда мы впервые засели за разработку платформы .NET, мы сделали шаг назад и посмотрели, что в действительности происходит с Web. Он становится распределенным миром с хорошим сообщением, мы попытались понять, что это может дать нашей модели программирования. И мы начали разработку с самого начала опираясь на то, что в распределенное приложение соответствует модным свойствам - имеет повсеместные связки и независимость от конкретного места, что дает вам возможность распространения. И как только мы приняли такое решение, все изменилось. Это изменяет способы создания простых сервисов, структуры сообщений для взаимодействия, и даже меняет оформление пользовательского интерфейса. Это новая модель программирования. Мы решили использовать XML и SOAP, чтобы сделать эту модель рабочей. Они сильно интегрированы с .NET, и эта интеграция в основе каждого нашего решения, которые мы делали, создавая платформу .NET. И это не то, мимо чего вы могли бы пройти, или вернуться позже.
Осборн: Не могли бы вы указать случай, где программист это будет использовать?
Хейлсберг: Один хороший пример - как XML интегрируется с C#. Мы имеем понятие атрибутов в C#, которые позволяют вам добавлять определенную информацию к типам и членам. Просто помимо того, чтобы сказать, является метод public или private, хочется еще сказать, позволяет ли он удаленный вызов, может ли он быть Web сервисом, или представляется ли он как XML. Мы добавили атрибуты для реализации механизма настроек, а потом мы применили их во всей инфраструктуре Web сервисов и XML. Мы также дали вам возможность добавлять атрибуты к классам, и к полям классов, говорящие: "Когда этот класс представляется в виде XML, он должен стать "этим" именем тэга, и должен поместиться в "это" пространство имен XML". Мы даем вам возможность указывать поля, которые в одном месте буду элементами, а в другом атрибутами. Мы даем вам возможность контролировать схему исходящего XML, контролировать это, когда вы даете определение класса так, что вся дополнительная определяемая информация будет доступной. Когда атрибуты используются для украшения вашего C# кода, система может просто превратить их в XML и переслать. Все это происходит в одном месте. Это отличается от файлов доопределений или разнообразных инфо и паттернов именований.
Я знаю, что немного отхожу от темы, но хочу сказать, что кое-что из поставляемой нами инфраструктуры - правда удивительные вещи. Например, имея эти атрибуты, вы можете запрашивать у нашей инфраструктуры вывода XML или Web сервисов представление любого заданного класса в виде XML. Когда вы это делаете, то получаете схему класса, XSD схему, мы создаем для вас специальный парсер, производный от нашего настраимового XML парсера (который является частью .NET классов), и переписываем методы и логику парсера специально для вашей схемы. Так мы реализовываем парсер, который со скоростью native кода будет разделывать XML. Если происходит ошибка мы выдаем вам красивое сообщение об ошибке, которое точно скажет вам, что именно не так. Затем мы кэшируем это в нашу инфрастуктуру кэширования кода, и это находится там до тех пор, пока в следующий раз не придет класс с такой же схемой и не скажет : "БАМ!".
Осборн: Как я вижу, тут скрываются очень интересные вещи.
Хейлсберг: Да, я думаю мы поведем поколение вперед, когда оно начнет думать об этом.
Осборн: Замечательно. Спасибо за уделенное время.
Хейлсберг: Всегда рады.