Showing posts with label UI. Show all posts
Showing posts with label UI. Show all posts

Wednesday, December 10, 2008

Динамический пользовательский интерфейс

Продолжение поста относительно URI-based interface. Непосредственно использование динамического пользовательского интерфейса в приложении не обязательно требует использования ранее указанного интерфейса управления и обеспечения работы с данными и их зависимостями при хранении и передаче, но у меня использовалась и подразумевается именно эта комбинация. Но это так пояснение общей структуры приложения...

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

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

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

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

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

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

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

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

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

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

Monday, November 3, 2008

Windows Seven?

Этот пост навеян постом в блоге Sleepless in Seattle. Хотя не только им, скорее общим субъективным мнением о новой ОС от Microsoft. Именно Субъективным!!!

Многие посты, что я видел, оставили у меня впечатление, что все ожидают от новой ос чего то особенного и желания от ранее указанной корпорации выпустить что-то особо новое, что удивит мир. Но у меня сложилось немного другое мнения читая блог Команды разработки Windows 7. Хотя, все это в любом случае PR.

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

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

Единственно, что не понравилось в презентации, что удалили как таковую панель на которой отображается список запущенных программ. Да красиво, что теперь программы не просто группируются, но и показывается превьюшка для открытых программ и при клике можно сразу открыть конкретное окно. Но просто по списку иконок невозможно сразу понять какие программы сейчас запущены. Я примерно таким способом настроил у себя под XFCE менюшки заменив нижнюю на cairo-dock. Удобно, но не не всегда практично и отказаться от верхнего списка запущенных программ я всё таки не могу. Спец-эффекты в виде прозрачности(в XFCE) я использую, но с минимумом на запуск - просто сделал чтобы окна при передвижении и в фоне были прозрачными - очень удобно и даже немного прикольно, но зачем все эти эффекты при запуске? Только тормозишь работу.

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

Вопрос относительно безопасности и переписанного сетевого стека с кучей ошибок в Висте немного не однозначен - ошибки есть везде и всегда иногда их называют особенностями и фичами, но в любом случае от них не избавиться. И если о них знаешь(или хотя бы догадываешься) - они не столь критичны - дырок много и в других подсистемах и неизвестно точно какая наиболее опасна для конкретной системы.

На популярный вопрос почему не снёс Висту, остается ответ, что если выключить все лишние эффекты и не обращать внимание на иногда назойливые вопросы: вы уверены? и именно вы запустили эту программу? - особой разницы между ХР и Вистой нет. А Виста лицензионная и дрова под неё на все устройства есть - причин для смены особо нет.