SlideShare une entreprise Scribd logo
1  sur  9
Докладчик: Павлов Михаил Борисович

e-mail: pavmb2001@mail.ru

Тема доклада: Первый опыт внедрения WPF в сложной системе (С++ и
COM).

В данном докладе я хочу поделиться опытом внедрения WPF, в сложный проект, реализованный с
использованием технологии COM большей частью на языке C++.

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

Надеюсь, данный опыт будет полезен кому-нибудь из слушателей.



План доклада:
   1. Введение

   2. Краткое описание системы до начала внедрения

      •   общая структура;

      •   задачи системы;

      •   использованные технологии.

   3. Цели внедрения WPF

      •   проблемы, которые хотели решить;

      •   ожидаемый (оптимистический) результат от внедрения.

   4. Возникшие трудности и способы их решения

      •   технологические трудности перехода         к   использованию   WPF,   интеграция
          существующих COM объектов и С++ кода;

      •   изменение стереотипов разработки UI (переход на Binding);

      •   проблемы организации взаимодействия программист-дизайнер;

      •   проблемы интеграции OpenGL рендеринга (кратко).

   5. Текущее положение вещей

      •   что удалось достичь;

      •   решенные и нерешенные проблемы;

      •   сравнение прогнозов в начале и реальных результатов.
6. Рекомендации
1. Введение

Здравствуйте уважаемые коллеги!

Я – Павлов Михаил, инженер-программист одной из кампаний группы кампаний «Транзас».

 Тема моего доклада – «Первый опыт внедрения WPF в сложной системе». Основные цели
доклада:

   •   рассказать о проблемах, возникающих на начальных этапах внедрения WPF;

   •    на основе полученного опыта, сформулировать рекомендации организации более
       эффективного рабочего процесса.

Несмотря на некоторую субъективность изложения, надеюсь, данный доклад будет полезен
кому-нибудь из слушателей.

2. Краткое описание системы до начала внедрения

Группа кампаний «Транзас» занимается морской тематикой, одним из направлений которой
является разработка полнофункциональных тренажеров управления кораблем. Тренажер
представляет собой максимально полную, имитацию мостика корабля, включая панорамные
экраны и систему имитации качки.

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

Задачами продукта являются:

   •   создание сцены района на базе каталога морских карт;

   •   загрузка дополнительных данных из различных источников: карты высот и глубин, гео-
       текстуры, прототипы, планы, дополнительная картографическая информация и т.п.;

   •   выборочное редактирование и детализация дизайнером;

   •   экспорт данных в формате понятном движку 3D визуализации.

Основным требованием является максимальный реализм итоговой сцены.

Обобщенно можно выделить следующие основные части:

   •   хранилище данных;

   •   логика;

   •   модули импорта;

   •   модуль экспорта;

   •   движок редактора с инструментами редактирования;
•   UI – основное окно + окна редактирования свойств объектов;

   •   Сопутствующие утилиты: библиотеки прототипов и материалов, редактор моделей
       кораблей, утилиты предварительного просмотра компонент сцены.

Изначально продукт разрабатывался на Visual C++ со всем набором сопутствующих
технологий:

   •   алгоритмы и логика – С++, COM;

   •   UI и движок редактора – С++, MFC, ATL, WTL, C#(WF);

   •   модули импорта-экспорта – C++, COM;

   •   визуализация – С++, COM, OpenGL;

   •   библиотеки материалов и прототипов – С++, COM, ATL, WTL;

   •   редактор моделей кораблей – C++, C#, COM.

Использование .Net носит «лоскутный» характер. Взаимодействие с такими компонентами
идет через COM.

3. Цели внедрения WPF

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

Подобный «рваный» ритм разработки, без кардинальной переработки базовых компонент
системы с определенного момента стал тупиком.

Потребовалась переработка системы с максимально полным учетом требований разработки
под отдельные заказы. Главным требованием для системы является легкая расширяемость.

 На момент начала разработки новой версии продукта существовал выбор между двумя
альтернативами: WPF и WF. От разработки интерфейса на С++ решили отказаться как от
устаревшей и бесперспективной.

Сошлись на том, что имея под собой одну основу (.Net) WPF позволит более эффективно
решить все наши проблемы:

   •   устаревший дизайн;

   •   падение скорости интеграции в UI функционала;

   •   ограничения в расширяемости ( .Net);

   •   отставание в технологиях.

Если судить по рекламе и циркулирующим в интернете примерам, WPF мог дать нам:

   •   переход на новейшие технологии;

   •   отделение программиста от разработки дизайна;
•   дизайном занимаются дизайнеры;

   •   улучшение внешнего вида;

   •   повышение функциональности интерфейса с помощью сложных проблемно-
       ориентированных компонент UI;

   •   ускорение разработки UI за счет использования Expression Blend;

   •   использование скинов.

Конечно, существовали риски, присущие любому новшеству, но плюсов было значительно
больше.

4. Возникшие трудности и способы их решения

Начальным этапом разработки стала поддержка использования .Net на уровне ядра системы.

Взаимодействие через COM интерфейсы решено было не использовать, в силу следующих
причин:

   •   большой объем сопутствующего кода, не связанного напрямую с функционалом;

   •   часть COM компонент требует написания Interop оберток, поддержка актуальности
       которых довольно затратна;

   •   потери быстродействия при взаимодействии через COM;

   •   хочется максимально использовать поиск ошибок во время компиляции.

Было решено писать ядро продукта на Managed C++.

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

Таким способом удалось полностью изолировать C++ код и COM в ядре. Будущий интерфейс
мог общаться с ядром только через managed код.

Первично было решено реализовать UI на более знакомой технологии WF. С последующим, по
мере освоения WPF, замещением. Это давало возможность безболезненной замены WPF на
альтернативную технологию, если было бы решено отказаться от его использования.

Тестирование возможностей WPF было решено проводить на отдельной, полностью
независимой утилите – менеджере материалов.

Данная утилита является интерфейсной оберткой ряда COM объектов, что дает возможность
сосредоточиться только на написании UI.

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

Параллельно с программированием осуществлялось изучение WPF по книгам и статьям.

К концу разработки выяснились следующие моменты:

   •   Разработка интерфейса в стиле WF менее эффективна, чем на WF. Причиной является
       большая сложность и ориентация на другой стиль разработки.

   •   Легкости модификации системы при внесении изменений, нет и в помине.

   •   Дизайн окон вручную съедает неоправданно много времени.

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

Было решено начать использование WPF в основном продукте.

Такое решение довольно безопасно, т.к. основной частью UI системы является множество
малосвязанных между собой окон редактирования свойств разнотипных объектов ( ~50
типов). Однако, требовалось внести изменения в процесс разработки исходя из предыдущего
опыта.

Было решено:

   •   Использовать Binding совместно с моделью Data-Model-View;

   •   Expression Blend в качестве редактора дизайна UI;

   •   Разделить обязанности между дизайнером и программистом: дизайнер рисует,
       программист пишет код;

   •   Увеличить количество разработчиков UI до двух человек.

Скорость разработки UI упала до рекордной величины.

Причины были как организационного, так и технического характера.

1) Использование binding требует переосмысление архитектуры, и определения их места в
   ней.

2) Повышение потенциальных возможностей UI вызвало множество корректур дизайна, на
   этапе разработки.

3) Expression Blend как сложный инструмент требует времени освоения. Главным его
   недостатком является замусоренность получающегося кода. Программист тратит
   значительное время на чистку кода.

4) Разработка нескольких окон предполагает формирование библиотеки стилей и базового
   функционала для всех окон.

5) Требуется переход на векторную графику, что ведет за собой полную или частичную
   переработку ресурсов.
6) Тонкости использования WPF.

7) Недоработки в самой библиотеке WPF. Проблемы хостинга WF компонент.

Последний пункт потребовал отдельного внимания, т.к. из-за него не удалось «по-простому»
подключить компонент предварительного просмотра 3D моделей.

Для предварительного просмотра моделей используется движок 3D визуализации. Для его
работы требуется handle окна, событие перерисовки, трансляция управления через ввод
пользователя. С такими ограничениями подключить визуализацию в окне WPF пока не
представляется возможным. Однако подключить его к элементу на WF, а сам элемент
интегрировать в окно на WPF – довольно тривиальная задача.

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

5. Текущее положение вещей

В настоящее время разработка диалоговых окон поставлена практически на поток.

Организационными мероприятиями и накоплением базы типовых архитектурных решений
удалось разрешить большинство проблем.

Программисты и дизайнер приобрели практический опыт использования WPF. Библиотека
перестала быть «чужой», что как следствие сократило время поиска решений новых проблем.
Требования к архитектуре стали интуитивно понятны.

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

Экспериментально был найден баланс обязанностей между дизайнером и программистом.
Это позволило максимально использовать Expression Blend в разработке, без траты
значительного времени на подчистку мусора.

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

Сформулированы пожелания заказчика к оформлению интерфейса.

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

Все это позволяет утверждать, что мы перешли на использование WPF в нашем продукте.

К сожалению нельзя сказать, что мы решили все проблемы связанные с переходом.
В основном эти проблемы связаны с разработкой на начальных этапах внедрения библиотеки.

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

Отдельным, до сих пор открытым, вопросом остается интеграция 3D визуализации в WPF.

Остается открытым вопрос о переводе всего приложения на WPF и полном отказе от
использования WF в UI.

Если сравнивать ожидаемый эффект от внедрения WPF и реально полученный, можно
утверждать: выполнены все ожидания, но с некоторыми оговорками.

Переход на новейшие технологии произведен, но не до конца. Больших проблем при
завершении перехода вроде не предвидится.

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

Улучшение внешнего вида – однозначно да.

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

Скины на WPF получаются практически без усилий, нужно просто продублировать библиотеку
стилей и внести в копию изменения. До реализации скинов мы пока не добрались, но
проблем пока не предвидится.

Ускорение разработки UI тоже нельзя оценить однозначно.

Если сравнивать технологии между собой получаем примерно следующую картину:

WTL < MFC < WPF< WF

В данном случае сравнение WPF и WF несколько не корректно. Если убрать временные
затраты на разработку дизайна и стилей (считаем что дизайн есть, а стили надо просто
назначить) то получим скорость разработки:

   •   для окон средней сложности WPF= WF;

   •   для окон большой сложности WF < WPF

Самое главное – не нужно забывать, что при разработке UI на WPF большая часть времени
тратится именно на дизайн. Учитывая то, что WPF дает возможность получить результат
практически недостижимый другими технологиями, то время разработки отходит на второй
план.

6. Рекомендации

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

1) Внедрять WPF должны программисты .Net (квалификация)

2) Внедрять должны минимум два программиста (совещательность)

3) Для одного из программистов      желателен опыт работы WPF (центр кристаллизации
   знаний)

4) Для дизайнера желателен опыт верстки HTML (подобие)

5) Структурируйте разработку UI с целью упорядочивания внесения изменений и понимания
   остальными происходящего (экономия времени и нервов)

6) Начинайте разработку с простой задачи с акцентом на библиотеку стилей (задел в ширину)

7) Продолжайте разработку с самой сложной, но локальной задачи (задел архитектуры)

8) Помните – архитектура главное, остальное по нескольку раз меняется (акцент)

Contenu connexe

Tendances

Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...Denis Vasilyev
 
Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...SBTech
 
терминология vol.2
терминология vol.2терминология vol.2
терминология vol.2SBTech
 
Виктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчикаВиктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчикаPositive Hack Days
 
метод организации репозитория исходного кода
метод организации репозитория исходного кодаметод организации репозитория исходного кода
метод организации репозитория исходного кодаSergii Shmarkatiuk
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17OdessaFrontend
 
Инструмент для разработки эл. курсов Course lab. WebSoft
Инструмент для разработки эл. курсов Course lab. WebSoftИнструмент для разработки эл. курсов Course lab. WebSoft
Инструмент для разработки эл. курсов Course lab. WebSoftСообщество eLearning PRO
 
ClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDDClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDDClub QA Kostroma
 
модульное программирование (35)
модульное программирование  (35)модульное программирование  (35)
модульное программирование (35)romachka_pole
 
Webinar: Основные компоненты для разработки мобильных приложений в Delphi
Webinar: Основные компоненты для разработки мобильных приложений в DelphiWebinar: Основные компоненты для разработки мобильных приложений в Delphi
Webinar: Основные компоненты для разработки мобильных приложений в DelphiDenis Vasilyev
 
Самоучитель CourseLab
Самоучитель CourseLabСамоучитель CourseLab
Самоучитель CourseLabValery Leontyev
 
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiWebinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiDenis Vasilyev
 
Автоматизированное тестирование мобильных приложений
Автоматизированное тестирование мобильных приложенийАвтоматизированное тестирование мобильных приложений
Автоматизированное тестирование мобильных приложенийТранслируем.бел
 
Agile software configuration management
Agile software configuration managementAgile software configuration management
Agile software configuration managementSergii Shmarkatiuk
 

Tendances (20)

Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
Seminar: Установка и настройка рабочего стенда разработчика Android-приложени...
 
Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...Терминология как основной способ поиска разработчиков или как не опозорится п...
Терминология как основной способ поиска разработчиков или как не опозорится п...
 
терминология vol.2
терминология vol.2терминология vol.2
терминология vol.2
 
Виктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчикаВиктор Стрелков - Jabber как инструмент разработчика
Виктор Стрелков - Jabber как инструмент разработчика
 
метод организации репозитория исходного кода
метод организации репозитория исходного кодаметод организации репозитория исходного кода
метод организации репозитория исходного кода
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
 
Инструмент для разработки эл. курсов Course lab. WebSoft
Инструмент для разработки эл. курсов Course lab. WebSoftИнструмент для разработки эл. курсов Course lab. WebSoft
Инструмент для разработки эл. курсов Course lab. WebSoft
 
Lecture 11 1
Lecture 11 1Lecture 11 1
Lecture 11 1
 
Lecture 11 1
Lecture 11 1Lecture 11 1
Lecture 11 1
 
Courselab презентация_2013
Courselab презентация_2013Courselab презентация_2013
Courselab презентация_2013
 
ClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDDClubQA #2. Unit testing and TDD
ClubQA #2. Unit testing and TDD
 
.NET Development
.NET Development.NET Development
.NET Development
 
модульное программирование (35)
модульное программирование  (35)модульное программирование  (35)
модульное программирование (35)
 
Webinar: Основные компоненты для разработки мобильных приложений в Delphi
Webinar: Основные компоненты для разработки мобильных приложений в DelphiWebinar: Основные компоненты для разработки мобильных приложений в Delphi
Webinar: Основные компоненты для разработки мобильных приложений в Delphi
 
190
190190
190
 
Самоучитель CourseLab
Самоучитель CourseLabСамоучитель CourseLab
Самоучитель CourseLab
 
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в DelphiWebinar: Разработка мобильного приложения для заучивания стихов в Delphi
Webinar: Разработка мобильного приложения для заучивания стихов в Delphi
 
Автоматизированное тестирование мобильных приложений
Автоматизированное тестирование мобильных приложенийАвтоматизированное тестирование мобильных приложений
Автоматизированное тестирование мобильных приложений
 
Agile software configuration management
Agile software configuration managementAgile software configuration management
Agile software configuration management
 
FlAnalyzer
FlAnalyzerFlAnalyzer
FlAnalyzer
 

Similaire à внедрении Wpf в сложных системах

Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...Ontico
 
Проект "Нихол"
Проект "Нихол"Проект "Нихол"
Проект "Нихол"E-Journal ICT4D
 
внедрении Wpf в сложных системах (слайды)
внедрении Wpf в сложных системах (слайды)внедрении Wpf в сложных системах (слайды)
внедрении Wpf в сложных системах (слайды)WhiteMbIXA
 
Применение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеПрименение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеAlexander Byndyu
 
Создаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияСоздаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияOvadiah Myrgorod
 
Основы быстрого прототипирования
Основы быстрого прототипированияОсновы быстрого прототипирования
Основы быстрого прототипированияMitya Osadchuk
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковCodeFest
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработкиIT-Доминанта
 
Модуль 15. Лекция 59-60.
Модуль 15. Лекция 59-60. Модуль 15. Лекция 59-60.
Модуль 15. Лекция 59-60. Yana Brodetski
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenchesGleb Rybalko
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Vadim Martynov
 
ПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решенийВиктор Золотов
 
Mva stf module 1 - rus
Mva stf module 1 - rusMva stf module 1 - rus
Mva stf module 1 - rusMaxim Shaptala
 
Новые возможности IBM WebSphere Portal v8 и IBM WCM v8
Новые возможности IBM WebSphere Portal v8 и IBM WCM v8Новые возможности IBM WebSphere Portal v8 и IBM WCM v8
Новые возможности IBM WebSphere Portal v8 и IBM WCM v8Anatoly Kireev
 
10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoftKewpaN
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Yandex
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаTatyanazaxarova
 

Similaire à внедрении Wpf в сложных системах (20)

Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
 
Проект "Нихол"
Проект "Нихол"Проект "Нихол"
Проект "Нихол"
 
внедрении Wpf в сложных системах (слайды)
внедрении Wpf в сложных системах (слайды)внедрении Wpf в сложных системах (слайды)
внедрении Wpf в сложных системах (слайды)
 
Применение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзеПрименение low-code платформ в энтерпрайзе
Применение low-code платформ в энтерпрайзе
 
Создаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровожденияСоздаем Drupal дистрибутив: от идеи до сопровождения
Создаем Drupal дистрибутив: от идеи до сопровождения
 
Основы быстрого прототипирования
Основы быстрого прототипированияОсновы быстрого прототипирования
Основы быстрого прототипирования
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
Java one presentation
Java one presentationJava one presentation
Java one presentation
 
Экскурс в мир WEB разработки
Экскурс в мир WEB разработкиЭкскурс в мир WEB разработки
Экскурс в мир WEB разработки
 
Модуль 15. Лекция 59-60.
Модуль 15. Лекция 59-60. Модуль 15. Лекция 59-60.
Модуль 15. Лекция 59-60.
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
Лучшие практики корпоративной разработки. Лекция 0: обзор курса.
 
Automation from the trenches
Automation from the trenchesAutomation from the trenches
Automation from the trenches
 
ПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решенийПартФорум DIRECTUM 2013 - разработка прикладных решений
ПартФорум DIRECTUM 2013 - разработка прикладных решений
 
Mva stf module 1 - rus
Mva stf module 1 - rusMva stf module 1 - rus
Mva stf module 1 - rus
 
Новые возможности IBM WebSphere Portal v8 и IBM WCM v8
Новые возможности IBM WebSphere Portal v8 и IBM WCM v8Новые возможности IBM WebSphere Portal v8 и IBM WCM v8
Новые возможности IBM WebSphere Portal v8 и IBM WCM v8
 
10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft10 компонентные и офисные приложения на платформе microsoft
10 компонентные и офисные приложения на платформе microsoft
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
 

внедрении Wpf в сложных системах

  • 1. Докладчик: Павлов Михаил Борисович e-mail: pavmb2001@mail.ru Тема доклада: Первый опыт внедрения WPF в сложной системе (С++ и COM). В данном докладе я хочу поделиться опытом внедрения WPF, в сложный проект, реализованный с использованием технологии COM большей частью на языке C++. На первый взгляд, очевидный процесс освоения новых технологий, таил в себе массу подводных камней, от интеграции существующих компонент до реорганизации взаимодействия членов команды. Надеюсь, данный опыт будет полезен кому-нибудь из слушателей. План доклада: 1. Введение 2. Краткое описание системы до начала внедрения • общая структура; • задачи системы; • использованные технологии. 3. Цели внедрения WPF • проблемы, которые хотели решить; • ожидаемый (оптимистический) результат от внедрения. 4. Возникшие трудности и способы их решения • технологические трудности перехода к использованию WPF, интеграция существующих COM объектов и С++ кода; • изменение стереотипов разработки UI (переход на Binding); • проблемы организации взаимодействия программист-дизайнер; • проблемы интеграции OpenGL рендеринга (кратко). 5. Текущее положение вещей • что удалось достичь; • решенные и нерешенные проблемы; • сравнение прогнозов в начале и реальных результатов.
  • 3. 1. Введение Здравствуйте уважаемые коллеги! Я – Павлов Михаил, инженер-программист одной из кампаний группы кампаний «Транзас». Тема моего доклада – «Первый опыт внедрения WPF в сложной системе». Основные цели доклада: • рассказать о проблемах, возникающих на начальных этапах внедрения WPF; • на основе полученного опыта, сформулировать рекомендации организации более эффективного рабочего процесса. Несмотря на некоторую субъективность изложения, надеюсь, данный доклад будет полезен кому-нибудь из слушателей. 2. Краткое описание системы до начала внедрения Группа кампаний «Транзас» занимается морской тематикой, одним из направлений которой является разработка полнофункциональных тренажеров управления кораблем. Тренажер представляет собой максимально полную, имитацию мостика корабля, включая панорамные экраны и систему имитации качки. Продукт, о котором пойдет речь, является дизайнером сцен. Параллельно с ним разрабатывается движок 3D визуализации, отображающий сцены в тренажере. Задачами продукта являются: • создание сцены района на базе каталога морских карт; • загрузка дополнительных данных из различных источников: карты высот и глубин, гео- текстуры, прототипы, планы, дополнительная картографическая информация и т.п.; • выборочное редактирование и детализация дизайнером; • экспорт данных в формате понятном движку 3D визуализации. Основным требованием является максимальный реализм итоговой сцены. Обобщенно можно выделить следующие основные части: • хранилище данных; • логика; • модули импорта; • модуль экспорта; • движок редактора с инструментами редактирования;
  • 4. UI – основное окно + окна редактирования свойств объектов; • Сопутствующие утилиты: библиотеки прототипов и материалов, редактор моделей кораблей, утилиты предварительного просмотра компонент сцены. Изначально продукт разрабатывался на Visual C++ со всем набором сопутствующих технологий: • алгоритмы и логика – С++, COM; • UI и движок редактора – С++, MFC, ATL, WTL, C#(WF); • модули импорта-экспорта – C++, COM; • визуализация – С++, COM, OpenGL; • библиотеки материалов и прототипов – С++, COM, ATL, WTL; • редактор моделей кораблей – C++, C#, COM. Использование .Net носит «лоскутный» характер. Взаимодействие с такими компонентами идет через COM. 3. Цели внедрения WPF Исторически сложился проектный подход расширения функционала, в рамках которого функционал, реализованный для одного заказчика, переносился в основную ветку. Подобный «рваный» ритм разработки, без кардинальной переработки базовых компонент системы с определенного момента стал тупиком. Потребовалась переработка системы с максимально полным учетом требований разработки под отдельные заказы. Главным требованием для системы является легкая расширяемость. На момент начала разработки новой версии продукта существовал выбор между двумя альтернативами: WPF и WF. От разработки интерфейса на С++ решили отказаться как от устаревшей и бесперспективной. Сошлись на том, что имея под собой одну основу (.Net) WPF позволит более эффективно решить все наши проблемы: • устаревший дизайн; • падение скорости интеграции в UI функционала; • ограничения в расширяемости ( .Net); • отставание в технологиях. Если судить по рекламе и циркулирующим в интернете примерам, WPF мог дать нам: • переход на новейшие технологии; • отделение программиста от разработки дизайна;
  • 5. дизайном занимаются дизайнеры; • улучшение внешнего вида; • повышение функциональности интерфейса с помощью сложных проблемно- ориентированных компонент UI; • ускорение разработки UI за счет использования Expression Blend; • использование скинов. Конечно, существовали риски, присущие любому новшеству, но плюсов было значительно больше. 4. Возникшие трудности и способы их решения Начальным этапом разработки стала поддержка использования .Net на уровне ядра системы. Взаимодействие через COM интерфейсы решено было не использовать, в силу следующих причин: • большой объем сопутствующего кода, не связанного напрямую с функционалом; • часть COM компонент требует написания Interop оберток, поддержка актуальности которых довольно затратна; • потери быстродействия при взаимодействии через COM; • хочется максимально использовать поиск ошибок во время компиляции. Было решено писать ядро продукта на Managed C++. Интеграция C++ кода в данном случае перестает быть проблемой. Остаются только трудности использования существующих COM объектов на уровне интерфейса. Для этого был написан ряд managed оберток, через которые транслировались вызовы. Таким способом удалось полностью изолировать C++ код и COM в ядре. Будущий интерфейс мог общаться с ядром только через managed код. Первично было решено реализовать UI на более знакомой технологии WF. С последующим, по мере освоения WPF, замещением. Это давало возможность безболезненной замены WPF на альтернативную технологию, если было бы решено отказаться от его использования. Тестирование возможностей WPF было решено проводить на отдельной, полностью независимой утилите – менеджере материалов. Данная утилита является интерфейсной оберткой ряда COM объектов, что дает возможность сосредоточиться только на написании UI. Тестирование пригодности WPF было поручено программисту с опытом разработки под WF. Считая WPF следующим этапом развития WF, он произвел разработку приложения в таком же стиле, попутно используя возможности WPF для украшения интерфейса.
  • 6. Дизайн программы был разработан дизайнером в графическом редакторе в виде набора картинок. Параллельно с программированием осуществлялось изучение WPF по книгам и статьям. К концу разработки выяснились следующие моменты: • Разработка интерфейса в стиле WF менее эффективна, чем на WF. Причиной является большая сложность и ориентация на другой стиль разработки. • Легкости модификации системы при внесении изменений, нет и в помине. • Дизайн окон вручную съедает неоправданно много времени. Не смотря на это, был получен довольно привлекательный дизайн, добиться которого другими технологиями, за разумное время, было практически невозможно. Было решено начать использование WPF в основном продукте. Такое решение довольно безопасно, т.к. основной частью UI системы является множество малосвязанных между собой окон редактирования свойств разнотипных объектов ( ~50 типов). Однако, требовалось внести изменения в процесс разработки исходя из предыдущего опыта. Было решено: • Использовать Binding совместно с моделью Data-Model-View; • Expression Blend в качестве редактора дизайна UI; • Разделить обязанности между дизайнером и программистом: дизайнер рисует, программист пишет код; • Увеличить количество разработчиков UI до двух человек. Скорость разработки UI упала до рекордной величины. Причины были как организационного, так и технического характера. 1) Использование binding требует переосмысление архитектуры, и определения их места в ней. 2) Повышение потенциальных возможностей UI вызвало множество корректур дизайна, на этапе разработки. 3) Expression Blend как сложный инструмент требует времени освоения. Главным его недостатком является замусоренность получающегося кода. Программист тратит значительное время на чистку кода. 4) Разработка нескольких окон предполагает формирование библиотеки стилей и базового функционала для всех окон. 5) Требуется переход на векторную графику, что ведет за собой полную или частичную переработку ресурсов.
  • 7. 6) Тонкости использования WPF. 7) Недоработки в самой библиотеке WPF. Проблемы хостинга WF компонент. Последний пункт потребовал отдельного внимания, т.к. из-за него не удалось «по-простому» подключить компонент предварительного просмотра 3D моделей. Для предварительного просмотра моделей используется движок 3D визуализации. Для его работы требуется handle окна, событие перерисовки, трансляция управления через ввод пользователя. С такими ограничениями подключить визуализацию в окне WPF пока не представляется возможным. Однако подключить его к элементу на WF, а сам элемент интегрировать в окно на WPF – довольно тривиальная задача. Данный подход был реализован и успешно работал до тех пор, пока в дизайне окна не появилась прозрачность. С этого момента по неизвестной причине между WPF и визуализацией началась драка за контекст окна. Единственным, пока, способом решения данной проблемы является рисование в буфер и вывод результата работы визуализации как обычной картинки. 5. Текущее положение вещей В настоящее время разработка диалоговых окон поставлена практически на поток. Организационными мероприятиями и накоплением базы типовых архитектурных решений удалось разрешить большинство проблем. Программисты и дизайнер приобрели практический опыт использования WPF. Библиотека перестала быть «чужой», что как следствие сократило время поиска решений новых проблем. Требования к архитектуре стали интуитивно понятны. Оформление документально процесса разработки интерфейса позволило упорядочить поток изменений, расходовавший значительный объем времени на переделки. Дело даже не в том, что требования документа выполнялись буквально. Главное было достигнуто понимание заинтересованными в разработке сторонами сути происходящих процессов, и цены внесения модификаций на каждом этапе. Экспериментально был найден баланс обязанностей между дизайнером и программистом. Это позволило максимально использовать Expression Blend в разработке, без траты значительного времени на подчистку мусора. На базе нескольких первых окон создана библиотека стилей и компонент ускоряющая разработку за счет повторного использования кода. Сформулированы пожелания заказчика к оформлению интерфейса. Найден баланс между переделкой растровых графических ресурсов в векторный формат. Сформулированы ограничения использования растрового формата, выход за которые ведет к переделке ресурса. Все это позволяет утверждать, что мы перешли на использование WPF в нашем продукте. К сожалению нельзя сказать, что мы решили все проблемы связанные с переходом.
  • 8. В основном эти проблемы связаны с разработкой на начальных этапах внедрения библиотеки. Требуется переработка архитектуры ряда диалоговых окон, разработанных на начальном этапе. Менеджер материалов требует, чуть ли не полной переделки архитектуры. Отдельным, до сих пор открытым, вопросом остается интеграция 3D визуализации в WPF. Остается открытым вопрос о переводе всего приложения на WPF и полном отказе от использования WF в UI. Если сравнивать ожидаемый эффект от внедрения WPF и реально полученный, можно утверждать: выполнены все ожидания, но с некоторыми оговорками. Переход на новейшие технологии произведен, но не до конца. Больших проблем при завершении перехода вроде не предвидится. Отделение программиста от разработки дизайна, а дизайнера от программирования выполнено в небольшом объеме. Это не означает, что такой подход к разработке утопия. Скорее это вопрос квалификации дизайнера и совершенства инструментов разработки дизайна. Expression Blend все более совершенствуется, и уже скоро перекроет функционалом потребности разработчиков полностью. С обучением дизайнеров все гораздо сложнее, требования к их компетенции довольно высоки. Улучшение внешнего вида – однозначно да. Повышение функциональности интерфейса с помощью сложных проблемно-ориентированных компонент UI – да, но все-таки с некоторыми оговорками. Разработка сложного специализированного компонента на WPF не создает особой сложности. Проблема скорее в методологии проектирования. Просто разработать сложный, очень сложный UI компонент не означает автоматического повышения юзабилити. Это сложный итерационный процесс, но не имеющий к WPF особого отношения. Скины на WPF получаются практически без усилий, нужно просто продублировать библиотеку стилей и внести в копию изменения. До реализации скинов мы пока не добрались, но проблем пока не предвидится. Ускорение разработки UI тоже нельзя оценить однозначно. Если сравнивать технологии между собой получаем примерно следующую картину: WTL < MFC < WPF< WF В данном случае сравнение WPF и WF несколько не корректно. Если убрать временные затраты на разработку дизайна и стилей (считаем что дизайн есть, а стили надо просто назначить) то получим скорость разработки: • для окон средней сложности WPF= WF; • для окон большой сложности WF < WPF Самое главное – не нужно забывать, что при разработке UI на WPF большая часть времени тратится именно на дизайн. Учитывая то, что WPF дает возможность получить результат
  • 9. практически недостижимый другими технологиями, то время разработки отходит на второй план. 6. Рекомендации В конце я хочу попробовать дать рекомендации, основанные на опыте нашей разработки, которые могли бы сократить потери времени: 1) Внедрять WPF должны программисты .Net (квалификация) 2) Внедрять должны минимум два программиста (совещательность) 3) Для одного из программистов желателен опыт работы WPF (центр кристаллизации знаний) 4) Для дизайнера желателен опыт верстки HTML (подобие) 5) Структурируйте разработку UI с целью упорядочивания внесения изменений и понимания остальными происходящего (экономия времени и нервов) 6) Начинайте разработку с простой задачи с акцентом на библиотеку стилей (задел в ширину) 7) Продолжайте разработку с самой сложной, но локальной задачи (задел архитектуры) 8) Помните – архитектура главное, остальное по нескольку раз меняется (акцент)