Введение в WPF, часть 1
Здравствуйте, меня зовут Женя Золотько и занимаюсь разработкой клиентских GUI-приложений и библиотек элементов управления последние несколько лет. Я успел поработать с несколькими разными средами создания GUI (включая не основанные на .NET). Сейчас близится выпуск .NET Framework 3.0, который включает в себя предложение Microsoft для разработчиков GUI - Windows Presentation Foundation (WPF, кодовое название Avalon). Я начал понемногу, обзороно и точечно изучать эту среду, и у меня возникло желание публиковать небольшие русскоязычные материалы по этой теме. Сейчас вы читаете первую такую публикацию.
Специфика разработки GUI-приложений.
Спустя некоторое время после того как разработчики начали создавать GUI-приложения в промышленных масштабах, некоторые из них стали задумываться о том, какие проблемы возникают и какие методы работы могут помочь в решении этих проблем. Оказалось, что проблем в этой области довольно много. Самой очевидной является то, что GUI-код на заре развития этой отрасли выглядел просто ужасно. Можно конечно возразить, что тогда были ковбойские времена и любой код выглядел ужасно. Но все же этот код был очень запутанным и чаще всего сами его создатели не могли в нем после разобраться. Далее, каждая компания-разработчик выдвигала свои требования к GUI-приложениям и добавляла свои "изюминки" к способу его реализации. Таким образом, для того, чтобы создавать морально допустимыми способами удовлетворительный UI, многие компании и разработчики создавали вспомогательные библиотеки практически с нуля. Позже выяснилось, что лушие способы создания GUI имеют похожие черты. Во-первых, чем лучше будет управление бизнес-логикой будет отделено от обработки ввода-вывода, тем лучше. Во-вторых, чем чаще код GUI повторно используется, тем лучше. И в третьих, чем проще задавать общий внешний вид для GUI тем тоже, естественно, лучше. И вот, исходя из этих и еще нескольких соображений, крупные и небольшие поставщики программного обеспечения (а конкретно библиотек и инструментов разработки) уже успели спроектировать, реализовать, научить людей пользоваться и продать довольно много разных решений, которые, по идее должны воплощать решение извечных проблем разработки GUI. Так уж выходит, что создать хорошее GUI-приложение без поддержки библиотек и сред разработки сейчас врядли получится.
Технологии-предшественники WPF, WinAPI и чистота концепций
Первая среда, с которой я столкнулся для разработки GUI была библиотка Turbo Vision, которая входила в состав пакета Borland Turbo Pascal. Эта среда позволяла создавать приложения, работающие под управлением MS-DOS в текстовом режиме работы экрана. Естественно, получающийся пользовательский интерфейс был не совсем графическим, но все равно довольно впечатляющим. Это была объектно-ориентированная библиотека на базе языка Turbo Pascal, которая к тому времени (почти два десятилетия назад) содержала почти все необходимые архитетурные элементы для современных промышленных решений. Она вводила понятия элементов управления, команд, событий или сообщений, и так далее. Расположение элементов управления надо было указывать процедурно вручную в координатах текстового экрана. Тогда она мне казалась верхом футуризма. Позже, когда Windows начала набирать обороты, появилась такая вещь, как WinAPI. При помощи нее Microsoft указывала способ, как писать программы (в том числе и GUI) для Windows. Все мы знаем о Common Controls, ресурсах, GDI и всех этих прекрасных инновациях Microsoft. Но еще, большей части здравомыслящих специалистов известно, что WinAPI - это своеобразное небольшое ИТ-средневековье. Почему-то все более или менее чистые концепции наработанные в "античные" времена DOS, сжигались на костре User32. Не очень-то много людей пострадало от "Ада DLL". Больше нормальных людей пострадало от ада венгерской нотации, моды на непонятные названия и непродуманные дизайнерские решения. Потом появилась MFC, со схожим по духу с WinAPI "объектно-ориентированным подходом", и компонентно-ориентированные продукты Borland, которые пытались построить более или менее концептуально чистые решения на базе неизбежного WinAPI. Еще все знают о до сих пор конвульсирующих элементах ActiveX, которые базируются на построенном на болоте здании COM. Потом появились идеи об управляемых средах, и они были реализованы в виде Java и .NET. Когда я узнал, что Microsoft делает свою управляемую платформу для Windows, я подумал, что они откажутся от WinAPI при создании стандартных библиотек. Но они почему-то создали GUI-библиотеку, очень похожую на библиотеки Borland Delphi/Bulder, только для управляемой среды - Windows Forms. Фактически, все то же, только в профиль. И только почти пять лет спустя Microsoft выпускает библиотеку, которая действительно тщательно спроектирована с нуля, содержит массу технологических инноваций и предлагает конечным пользователям GUI, основанный на новом векторно-трехмерном движке. Таким образом, некоторые из нас могут заинтересоваться этой действительно необычной ситуацией сейчас, и, возможно, получить от этого доход.
Более детально об основных инновациях WPF я расскажу здесь в следующем посте.