PureMVС в картинках - для ленивых – Ростислав Сирык

Презентация:



Advertisements
Похожие презентации
1.Введение 2.Немного теории a.Концептуальная диаграмма b.Суть фреймворка c.Как это работает 3.Пример: IT Developers v1 4.Actionscript 3 [Multicore version]
Advertisements

Программная иженерия Андрей Дмитриев ©
Дружественные функции Дружественные функции – это функции, объявленные вне класса, но имеющие доступ к закрытым и защищенным полям данного класса Дружественная.
Дизайн и Верстка Системы Организации Видео Архива (СОВА) МИЭМ, Пашинцев Иван, С-55.
Лекция 1 MVC (Model-View-Controller) - это конструкционный шаблон, который описывает способ построения структуры приложения, сферы ответственности и взаимодействие.
MVVM pattern in Adobe Flex Докладчик: Мещеряков Сергей.
Всевоволод Головизнин, MVC – паттерн проектирование, в котором бизнес - логика, управляющая логика и интерфейс разделены на три отдельных компонента.
Паттерны проектирования «Facade» Никольский Кирилл 245 группа.
ArtfulBits inc. aiMinesweeper. Первая в Украине игра для Android. Android custom components Anti-piracy движение Готовые решения для Android-разработчиков.
Платформа J2EE Сервис: Java Naming Directory (JNDI) – универсальный сервис хранения объектов в иерархической структуре имен (аналогично файловой системе)
AJAX Выполнила: студентка группы ПИ-311 Газизова Влада.
Предпосылки формирования нового подхода к проектированию динамических ресурсов всемирной паутины ацп. Кейно П.П. Научный руководитель: проф., к.т.н. Силуянов.
EPAM Systemswww.epam.com EPAM Systemswww.epam.com Программирование на языке C# Основы ООП.
1 © Luxoft Training 2012 Java: расширенные вопросы Модуль #8.
OpenGL и Direct3D сравнение стандартов Выполнил: Пенкин А. Группа И-204.
Web 2.0 Твердохлеб Татьяна гр.9231 users, thro. Web 2.0 (определение Тима ОРейли) методика проектирования систем, которые путём учета сетевых взаимодействий.
Flash портал top4top.ru: структура, проблемы, решения.
1 Java 6. ИНТЕРФЕЙСЫ И ВНУТРЕННИЕ КЛАССЫ. 2 Интерфейсы Не являются классами Ни один из объявленных методов не может быть реализован внутри интерфейса.
Где хранить данные в web- приложении page –JSP страница request – HTTP запрос session – сессия пользователя application – веб-приложение Static Java class.
Cairngorm Microarchitecture Павел Кожин Exigen Services
Транксрипт:

PureMVС в картинках - для ленивых – Ростислав Сирык

Способы разработки приложений Хотелось бы: Хотелось бы: «Раз!» - «работка» «Раз!» - «работка» Есть: Есть: «Раз!» - «…а получилось как обычно» «Раз!» - «…а получилось как обычно» Должно быть: Должно быть: 1. Раз-Ра-Бот-Ка («по-э-тап-но») 1. Раз-Ра-Бот-Ка («по-э-тап-но»)

PureMVC для ленивых Вопрос: Зачем нужен PureMVC? Вопрос: Зачем нужен PureMVC? Ответ: Для экономии лени. Ответ: Для экономии лени. 1. Лень – это друг человека. 2. Количество лени во Вселенной ограничено и неизменно ;-( 3. Лень не берется из ниоткуда не исчезает в никуда. 4. Слишком умные отбирают лень у просто умных PureMVC оружие «слишком» умных. PureMVC оружие «слишком» умных.

Векторная карта Москвы - пример PureMVC-приложения -

Векторная карта как дерево На вид двумерная, но внутри четыре измерения

Общий вид карты

Работа карты с браузером

Требования к карте Карта Москвы с точностью до метра Карта Москвы с точностью до метра 9 уровней масштаба 9 уровней масштаба Гибкая настройка стиля и поведения Гибкая настройка стиля и поведения Инструменты карты Инструменты карты «Чтобы работала лучше Mos2.ru» «Чтобы работала лучше Mos2.ru»Mos2.ru Рабочая версия Рабочая версия

- рефакторинг - Большая переделка

Если вы попали в серьезную переделку Рефакторинг или Реорганизация процесс полного или частичного преобразования внутренней структуры программы при сохранении её внешнего поведения.

Подходы к рефакторингу Наивный (нет подхода): Наивный (нет подхода): как-нибудь да получится («какой-какой «рефакторинг?») как-нибудь да получится («какой-какой «рефакторинг?») Самоуверенный: Самоуверенный: вера в идеальный код, не нуждающийся в переделке вера в идеальный код, не нуждающийся в переделке Эгоистичный: Эгоистичный: пусть рефакторит компьютер, он железный пусть рефакторит компьютер, он железный Осознанный: Осознанный: делаем с учетом будущего, придерживаемся правил делаем с учетом будущего, придерживаемся правил Стратегический: Стратегический: применение паттернов, проектирование, фреймворки. применение паттернов, проектирование, фреймворки.

Методы рефакторинга Изменение сигнатуры метода Изменение сигнатуры метода Заключается в добавлении, изменении или удалении параметра метода. Заключается в добавлении, изменении или удалении параметра метода. Инкапсуляция поля Инкапсуляция поля Было: public var x: Number; Было: public var x: Number; Стало: private var _x: Number; // добавляется getter-setter Стало: private var _x: Number; // добавляется getter-setter Выделение метода Выделение метода Самокомментирующийся код: если фрагмент кода требует комментария, то его следует выделить в отдельный метод и назвать так, чтобы данный комментарий стал ненужным. Самокомментирующийся код: если фрагмент кода требует комментария, то его следует выделить в отдельный метод и назвать так, чтобы данный комментарий стал ненужным. Перемещение метода Перемещение метода Перемещается метод, который чаще обращается к другому классу, чем к своему собственному. Перемещается метод, который чаще обращается к другому классу, чем к своему собственному.

Проблемы от рефакторинга Проблемы, связанные с базами данных Проблемы, связанные с базами данных Проблемы изменения интерфейсов Проблемы изменения интерфейсов Трудности при изменении дизайна Трудности при изменении дизайна

PureMVC - и паттерны проектирования -

Что такое PureMVC PureMVC - это классический мета-паттерн «Model-View-Controller» PureMVC - это классический мета-паттерн «Model-View-Controller»Model-View-Controller Proxies = Модель Proxies = Модель Mediator = Представление Mediator = Представление Commands = Контроллер Commands = Контроллер + Notifications (Оповещения) для коммуникации. + Notifications (Оповещения) для коммуникации. + (Фасад) для координирования + Façade (Фасад) для координирования

Шутка про k=3 Математик идет по улице. Видит филармония, афиша, "Камерный оркестр Джо Пауэлла". О, говорит, интересно, зайду. Через полчаса растроенный выходит: "Тьфу, тривиальный случай, k=3" Математик идет по улице. Видит филармония, афиша, "Камерный оркестр Джо Пауэлла". О, говорит, интересно, зайду. Через полчаса растроенный выходит: "Тьфу, тривиальный случай, k=3" Математик что-то знал (Паттерны?). Математик что-то знал (Паттерны?).

Схема PureMVC

Схема PureMVC (0xffffff)

Что дает PureMVC Дисциплина разработки Дисциплина разработки Общий язык для архитекторов Общий язык для архитекторов Более устойчивый к рефакторингу проект Более устойчивый к рефакторингу проект

Структура PureMVC Фасад: Фасад: Показать все, что скрыто. Показать все, что скрыто. Медиатор: Медиатор: Скрыть все, что видно. Скрыть все, что видно. Посредник: Посредник: Отдать то, что взято. Отдать то, что взято. Команда: Команда: Сделать, когда нужно. Сделать, когда нужно. Оповещение: Оповещение: Сделаю все, что скажут. Сделаю все, что скажут. Пойду туда, куда пошлют. Пойду туда, куда пошлют. Принесу то, не знаю что. Принесу то, не знаю что.

Популярность PureMVC AS2 Java AS3 Standard AS3 Standard AS3 MultiCore AS3 MultiCore ColdFusion C# Perl PHP Python Ruby

Мы хотим знать разницу PureMVC or Cairngorm? >> Интересует Ваше мнение по этим библиотекам >> и вообще по паттерным решениям для Flex. Без сомнения и то и другое полезно. Но если бы еще авторы их уделяли достаточно внимания "расжевыванию" своих замыслов реализованных во фреймворке. Качественное "расжевывание" - это когда даже студенту-программисту незнакомому с паттернами будет ясно что к чему. Потому что когда специалист не может оценить риски по миграции - это уже либо бестолковое описание, либо "особая форма маркетинга" (сокрытие информации о недостатках продукта) ИМХО. [ PureMVC or Cairngorm? >> Интересует Ваше мнение по этим библиотекам >> и вообще по паттерным решениям для Flex. Без сомнения и то и другое полезно. Но если бы еще авторы их уделяли достаточно внимания "расжевыванию" своих замыслов реализованных во фреймворке. Качественное "расжевывание" - это когда даже студенту-программисту незнакомому с паттернами будет ясно что к чему. Потому что когда специалист не может оценить риски по миграции - это уже либо бестолковое описание, либо "особая форма маркетинга" (сокрытие информации о недостатках продукта) ИМХО. [

Изучение PureMVC Goals & Benefits Goals & Benefits Goals & Benefits Goals & Benefits Conceptual Diagram Conceptual Diagram Conceptual Diagram Conceptual Diagram Framework Overview Framework Overview Framework Overview Framework Overview Best Practices Best Practices Best Practices Best Practices

Статьи о PureMVC на русском 10 советов по PureMVC 10 советов по PureMVC 10 советов по PureMVC 10 советов по PureMVC Что мы знаем о flash/flex фреймуорках? Что мы знаем о flash/flex фреймуорках? Что мы знаем о flash/flex фреймуорках? Что мы знаем о flash/flex фреймуорках? Пример Flash-галереи на PureMVC Пример Flash-галереи на PureMVC Пример Flash-галереи на PureMVC Пример Flash-галереи на PureMVC Как создать простой FLV-плеер во Flex и Flash, используя PureMVC Как создать простой FLV-плеер во Flex и Flash, используя PureMVC Как создать простой FLV-плеер во Flex и Flash, используя PureMVC Как создать простой FLV-плеер во Flex и Flash, используя PureMVC Мои статьи -= Чисто MVC =- (тут важны комменты) -= Чисто MVC =- (тут важны комменты) -= Чисто MVC =- (тут важны комменты) -= Чисто MVC =- (тут важны комменты) Архитектура и ключевые фигуры фреймворка PureMVC Архитектура и ключевые фигуры фреймворка PureMVC Архитектура и ключевые фигуры фреймворка PureMVC Архитектура и ключевые фигуры фреймворка PureMVC Фасад (Façade) ядро и лицо фреймворка PureMVC Фасад (Façade) ядро и лицо фреймворка PureMVC Фасад (Façade) ядро и лицо фреймворка PureMVC Фасад (Façade) ядро и лицо фреймворка PureMVC Как устроены Модель, Вид и Управление во фреймворке PureMVC Как устроены Модель, Вид и Управление во фреймворке PureMVC Как устроены Модель, Вид и Управление во фреймворке PureMVC Как устроены Модель, Вид и Управление во фреймворке PureMVC Кто использует Cairngorm? Кто использует Cairngorm? Кто использует Cairngorm? Кто использует Cairngorm? Обновления по статьям, новые ссылки: Обновления по статьям, новые ссылки:

Развитие PureMVC: Мультитон Multiton вместо Singleton Multiton вместо Singleton Мультитон – паттерн, подобный Синглтону, позволяющий создание более одного экземпляра класса. Мультитон – паттерн, подобный Синглтону, позволяющий создание более одного экземпляра класса. Вместо Одиночки – группа Одиночек, доступных по ключам (экземпляров). Вместо Одиночки – группа Одиночек, доступных по ключам (экземпляров). Клиенты не могут добавлять ключи. Клиенты не могут добавлять ключи. Никогда не возвращает пустую ссылку. Никогда не возвращает пустую ссылку. Польза: упрощение работы с общими ресурсами в приложении (shared objects). Польза: упрощение работы с общими ресурсами в приложении (shared objects). Централизованный доступ к хранилищу. Централизованный доступ к хранилищу.

Пример использования PureMVC - в приложении карты -

Обновление карты-1: Вид Класс MapView (boundary) package view { public class MapView extends Sprite { private function updateMap():void { mapMediator.onBBoxChanged(layersToLoad); }}}

Обновление карты-2: Медиатор Класс MapMediator package view { public class MapMediator extends Mediator { internal function onBBoxChanged(layersToLoad: Array): void { var noteBBoxUpdate: Notification = new Notification(ApplicatonFacade.NOTE_BBOX_UPDATE); noteBBoxUpdate.setBody(layersToLoad); facade.notifyObservers(noteBBoxUpdate); }}}

Обновление карты-3: Фасад Класс ApplicationFacade package{ public class ApplicatonFacade extends Facade implements IFacade { public static const NOTE_BBOX_UPDATE: String= "noteBBoxUpdate"; // Commands registration override protected function initializeController(): void { super.initializeController(); // Layer Model.updatePatchesInRectangle registerCommand(NOTE_BBOX_UPDATE, UpdateBBoxCommand); }}}

Обновление карты-4: Команда Класс UpdateBBoxCommand package controller { public class UpdateBBoxCommand extends SimpleCommand { override public function execute(note: INotification): void { ApplicatonFacade.msProxy.updateMap(note.getBody() as Array); }}}

Обновление карты-5: Прокси Класс MapServerProxy package model { public class MapServerProxy extends Proxy { public function updateMap (layersToLoad:Array):void {mapModel.loadLayers(layersToLoad);}}}

Обновление карты-6: Модель Класс MapModel package model { internal class MapModel { internal function loadLayers (arrLayersToLoad:Array):void { // собственно загрузка данных }}}

PureMVC спешит на помощь Рефакторинг 1: Смена источника данных с Geo XML на AMF Рефакторинг 1: Смена источника данных с Geo XML на AMF

PureMVC помогает еще раз Рефакторинг 2. Древовидный рендеринг карты. Рефакторинг 2. Древовидный рендеринг карты. Смена сигнатуры метода Смена сигнатуры метода Было: private function renderGeoEntity(data: FlashGeoEntity): void Было: private function renderGeoEntity(data: FlashGeoEntity): void Стало: private function renderGeoEntity(): void // после initGeoEntity Стало: private function renderGeoEntity(): void // после initGeoEntity Переход от Спрайтов к Шейпам Переход от Спрайтов к Шейпам Откат на Спрайты Откат на Спрайты

5 советов по PureMVC 1. Используйте Медиаторы: создавайте API для компонентов вида в Медиаторах, а не используйте их методы напрямую. 2. Используйте Оповещения почаще (но не напрямую от Медиатора к Прокси). 3. Используйте Команды и МакроКоманды. 4. Используйте Remote Proxy. 5. Используйте Value Objects (VO).

Почему проект выжил 1. Благодаря разделению кода с самого начала 2. Благодаря разделению кода с самого начала 3. Благодаря разделению кода с самого начала 4. Благодаря разделению кода с самого начала 5. Благодаря разделению кода с самого начала 6. Благодаря разделению кода с самого начала 7. Благодаря разделению кода с самого начала 8. Благодаря разделению кода с самого начала 9. Благодаря разделению кода с самого начала 10. Благодаря разделению кода с самого начала 11. Благодаря разделению кода с самого начала 12. Благодаря разделению кода с самого начала

Q & AQ & AQ & AQ & A