Краткое введение в mate flex framework

43
Краткое введение в Mate Flex framework Константин Ковалёв http://riapriority.com/ [email protected] 24 августа 2008 г.

Upload: constantiner

Post on 16-Jun-2015

2.804 views

Category:

Documents


0 download

DESCRIPTION

Доклад Константина Ковалёва aka Constantiner освещает основные особенности Flex-фреймворка Mate и дает все необходимые ссылки.

TRANSCRIPT

Page 1: Краткое введение в Mate Flex framework

Краткое введение в Mate Flex framework

Константин Ковалёвhttp://riapriority.com/

[email protected]

24 августа 2008 г.

Page 2: Краткое введение в Mate Flex framework

Как это выглядит?

http://mate.asfusion.com/ Мáтэ

Page 3: Краткое введение в Mate Flex framework

Немного фактов

• Публичное появление 4 мая 2008

• Альфа

• Использовался в проектах AsFusion

• Текущая версия 0.7.5

• http://mate-framework.googlecode.com/svn/trunk/src

• Apache License, Version 2.0

Page 4: Краткое введение в Mate Flex framework

Особенности

• СОБЫТИЯ!– «Родная» событийная модель

• Декларативный синтаксис• Dependency injection• Связывание данных• Используются сильные стороны Flex!• Это не микроархитектура – это framework!• Синглтонов – нет!

Page 5: Краткое введение в Mate Flex framework

Использование

http://mate.asfusion.com/page/documentation/getting-started

Page 6: Краткое введение в Mate Flex framework

1. Главный файл приложения

<?xml version="1.0" encoding="utf-8"?>

<mx:Application

xmlns:mx="http://www.adobe.com/2006/mxml"

xmlns="*">

<MainEventMap />

<MainUI />

</mx:Application>

Page 7: Краткое введение в Mate Flex framework

2. Событие

package

{

import flash.events.Event;

public class TestEvent extends Event

{

public static const BUTTON_CLICK:String = "buttonClick";

public function TestEvent(type:String,

bubbles:Boolean=true, cancelable:Boolean=false)

{

super(type, bubbles, cancelable);

}

}

}

Page 8: Краткое введение в Mate Flex framework

3. Класс представления

<?xml version="1.0" encoding="utf-8"?>

<mx:Box

xmlns:mx="http://www.adobe.com/2006/mxml"

xmlns:mate="http://mate.asfusion.com/">

<mate:Dispatcher

id="clickDispatcher"

generator="{TestEvent}"

type="{TestEvent.BUTTON_CLICK}" />

<mx:Button

label="Click Me!"

click="clickDispatcher.generateEvent()" />

</mx:Box>

Page 9: Краткое введение в Mate Flex framework

3. Класс представления (old style)

<?xml version="1.0" encoding="utf-8"?>

<mx:Box

xmlns:mx="http://www.adobe.com/2006/mxml"

xmlns:mate="http://mate.asfusion.com/">

<mx:Button

label="Click Me!"

click="dispatchEvent(new TestEvent (TestEvent.BUTTON_CLICK)" />

</mx:Box>

Page 10: Краткое введение в Mate Flex framework

4. EventMap

<?xml version="1.0" encoding="utf-8"?>

<mate:EventMap

xmlns:mx="http://www.adobe.com/2006/mxml"

xmlns:mate="http://mate.asfusion.com/">

<mate:EventHandlers

type="{TestEvent.BUTTON_CLICK}">

<SomeAction />

</mate:EventHandlers>

</mate:EventMap>

Page 11: Краткое введение в Mate Flex framework

5. Model

package

{

public class ClickManager

{

[Bindable]

public var clickNumber:int = 0;

public function performClick ():void

{

clickNumber ++;

}

}

}

Page 12: Краткое введение в Mate Flex framework

4. EventMap из реальной жизни (почти )

<?xml version="1.0" encoding="utf-8"?>

<mate:EventMap

xmlns:mx="http://www.adobe.com/2006/mxml"

xmlns:mate="http://mate.asfusion.com/">

<mate:EventHandlers

type="{TestEvent.BUTTON_CLICK}">

<mate:MethodInvoker

generator="{ClickManager}"

method="performClick" />

</mate:EventHandlers>

</mate:EventMap>

Page 13: Краткое введение в Mate Flex framework

3. Класс представления (из реальной жизни )

<?xml version="1.0" encoding="utf-8"?>

<mx:Box

xmlns:mx="http://www.adobe.com/2006/mxml"

xmlns:mate="http://mate.asfusion.com/">

<mate:Dispatcher

id="clickDispatcher"

generator="{TestEvent}"

type="{TestEvent.BUTTON_CLICK}" />

<mx:Number

id="clickNumber" />

<mx:Button

label="Click Me!"

click="clickDispatcher.generateEvent()" />

<mx:Label

text="{clickNumber}" />

</mx:Box>

Page 14: Краткое введение в Mate Flex framework

4. EventMap (финальный аккорд)

<?xml version="1.0" encoding="utf-8"?>

<mate:EventMap

xmlns:mx="http://www.adobe.com/2006/mxml"

xmlns:mate="http://mate.asfusion.com/">

<mate:EventHandlers

type="{TestEvent.BUTTON_CLICK}">

<mate:MethodInvoker

generator="{ClickManager}"

method="performClick" />

</mate:EventHandlers>

<mate:Injectors

target="{MainUI}">

<mate:PropertyInjector

source="{ClickManager}"

sourceKey="clickNumber"

targetKey="clickNumber" />

</mate:Injectors>

</mate:EventMap>

Page 15: Краткое введение в Mate Flex framework

Общая картина

MainUIMainUI

MainEventMapMainEventMap

ClickManagerClickManager

Page 16: Краткое введение в Mate Flex framework

TestEvent.BUTTON_CLICK

Общая картина

MainUIMainUI

MainEventMapMainEventMap

ClickManagerClickManager

Page 17: Краткое введение в Mate Flex framework

performClick ()TestEvent.BUTTON_CLICK

Общая картина

MainUIMainUI

MainEventMapMainEventMap

ClickManagerClickManager

Page 18: Краткое введение в Mate Flex framework

{clickNumber}

performClick ()TestEvent.BUTTON_CLICK

Общая картина

MainUIMainUI

MainEventMapMainEventMap

ClickManagerClickManager

Page 19: Краткое введение в Mate Flex framework

{clickNumber}

performClick ()TestEvent.BUTTON_CLICK

ModelModel

ControllerController

ViewView

Общая картина

MainUIMainUI

MainEventMapMainEventMap

ClickManagerClickManager

Page 20: Краткое введение в Mate Flex framework

Разделяем контроллер и Dependency injection

<?xml version="1.0" encoding="utf-8"?>

<mx:Application

xmlns:mx="http://www.adobe.com/2006/mxml"

xmlns="*">

<MainEventMap />

<MainUI />

<ModelMap />

</mx:Application>

Page 21: Краткое введение в Mate Flex framework

Разделяем контроллер и Dependency injection

<?xml version="1.0" encoding="utf-8"?>

<!-- ModelMap -->

<mate:EventMap

xmlns:mx="http://www.adobe.com/2006/mxml"

xmlns:mate="http://mate.asfusion.com/">

<mate:Injectors

target="{MainUI}">

<mate:PropertyInjector

source="{ClickManager}"

sourceKey="clickNumber"

targetKey="clickNumber" />

</mate:Injectors>

</mate:EventMap>

Page 22: Краткое введение в Mate Flex framework

Взаимодействие с сервером

MainUIMainUI

MainEventMapMainEventMap

ServerServer

Page 23: Краткое введение в Mate Flex framework

Взаимодействие с сервером

TestEvent.BUTTON_CLICK

MainUIMainUI

MainEventMapMainEventMap

ServerServer

Page 24: Краткое введение в Mate Flex framework

Взаимодействие с сервером

performClick ()TestEvent.BUTTON_CLICK

MainUIMainUI

MainEventMapMainEventMap

ServerServer

Page 25: Краткое введение в Mate Flex framework

Взаимодействие с сервером

performClick ()TestEvent.BUTTON_CLICK

MainUIMainUI

MainEventMapMainEventMap

ServerServer

clickNumber ++

Page 26: Краткое введение в Mate Flex framework

Взаимодействие с сервером

performClick ()TestEvent.BUTTON_CLICK

MainUIMainUI

MainEventMapMainEventMap

ServerServer

clickNumber ++

clickNumber

Page 27: Краткое введение в Mate Flex framework

Взаимодействие с сервером

performClick ()TestEvent.BUTTON_CLICK

MainUIMainUI

MainEventMapMainEventMap

ServerServer

clickNumber ++

clickNumber

clickNumber

Page 28: Краткое введение в Mate Flex framework

Идем на сервер

<?xml version="1.0" encoding="utf-8"?>

<mate:EventMap

xmlns:mx="http://www.adobe.com/2006/mxml"

xmlns:mate="http://mate.asfusion.com/">

<mate:EventHandlers

type="{TestEvent.BUTTON_CLICK}">

<mate:RemoteObjectInvoker

destination="someDestination"

method="performClick">

<mate:resultHandlers>

<mate:ServiceResponseAnnouncer

type="result" />

</mate:resultHandlers>

</mate:RemoteObjectInvoker>

</mate:EventHandlers>

</mate:EventMap>

Page 29: Краткое введение в Mate Flex framework

Видоизмененный View<?xml version="1.0" encoding="utf-8"?>

<mx:Box xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:mate="http://mate.asfusion.com/">

<mx:Script>

<![CDATA[

import com.asfusion.mate.events.ResponseEvent;

[Bindable]

public var clickNumber:Number = 0;

private function onResult (event:ResponseEvent):void {

clickNumber = Number (event.result);

}

]]>

</mx:Script>

<mate:Dispatcher id="clickDispatcher” generator="{TestEvent}” type="{TestEvent.BUTTON_CLICK}">

<mate:ServiceResponseHandler

result="onResult(event)" />

</mate:Dispatcher>

<mx:Button label="Click Me!” click="clickDispatcher.generateEvent()" />

<mx:Label text="{clickNumber}" />

</mx:Box>

Page 30: Краткое введение в Mate Flex framework

Передача параметров

Page 31: Краткое введение в Mate Flex framework

Видоизмененное событие

package

{

import flash.events.Event;

public class TestEvent extends Event {

public static const BUTTON_CLICK:String = "buttonClick";

public var amount:int;

public function TestEvent(type:String,

bubbles:Boolean=true, cancelable:Boolean=false) {

super(type, bubbles, cancelable);

}

}

}

Page 32: Краткое введение в Mate Flex framework

Параметр во View

<mx:Number

id="currentAmount">1</mx:Number>

<mx:RadioButtonGroup id="amountGroup"

change="currentAmount = event.currentTarget.selection.data" />

<mx:RadioButton

group="{amountGroup}“

selected=“true”

data="1"

label="1" />

<mx:RadioButton

group="{amountGroup}"

data="2"

label="2" />

Page 33: Краткое введение в Mate Flex framework

Рассылка события из View

<mate:Dispatcher

id="clickDispatcher"

generator="{TestEvent}"

type="{TestEvent.BUTTON_CLICK}">

<mate:eventProperties>

<mate:EventProperties

amount="{currentAmount}" />

</mate:eventProperties>

</mate:Dispatcher>

<mx:Number

id="currentAmount">1</mx:Number>

Page 34: Краткое введение в Mate Flex framework

Отсылка параметра на сервер

<mate:EventHandlers

type="{TestEvent.BUTTON_CLICK}">

<mate:RemoteObjectInvoker

destination="someDestination"

method="performClick "

arguments="{event.amount}">

<mate:resultHandlers>

<mate:ServiceResponseAnnouncer

type="result" />

</mate:resultHandlers>

</mate:RemoteObjectInvoker>

</mate:EventHandlers>

Page 35: Краткое введение в Mate Flex framework

EventMap: SmartObject

• event• resultObject• fault• lastReturn• message• data• scope• currentEvent

<mate:RemoteObjectInvokerdestination="someDestination“method="performClick “arguments="{event.amount}">…</mate:RemoteObjectInvoker>

Page 36: Краткое введение в Mate Flex framework

Хитрости SmartObject

• Можно:– arguments=“{event.count}”

• Нельзя:– arguments=“{event.count + 1}”– arguments=“{event.book.id}”– итд.

• Можно использовать MethodInvoker

Page 37: Краткое введение в Mate Flex framework

Отладка

<mate:Debugger

level="{Debugger.DEBUG}" />

<mate:EventHandlers

debug="true"

type="{TestEvent.BUTTON_CLICK}">• Не забывайте убирать после

отладки: жрет ресурсы!

Page 38: Краткое введение в Mate Flex framework

Взаимодействие с сервером

• RemoteObjectInvoker• HTTPServiceInvoker• WebServiceInvoker• Производные от ServiceInvoker > AbstractServiceInvoker

• При создании своего сервиса:– implements IAction

Page 39: Краткое введение в Mate Flex framework

Собственные обработчики

• implements IAction• Можно унаследоваться от AbstractAction

Page 40: Краткое введение в Mate Flex framework

Ресурсы

• http://mate.asfusion.com/page/documentation• http://mate.asfusion.com/api_docs • http://mate.asfusion.com/page/downloads• http://mate.asfusion.com/page/examples

Page 41: Краткое введение в Mate Flex framework

Mate+Cairngorm= ♥• http://mate.asfusion.com/page/examples/

cafe-townsend

Page 42: Краткое введение в Mate Flex framework

Пример Ozon Book Finder

Page 43: Краткое введение в Mate Flex framework

Q&A

Константин Ковалёвhttp://riapriority.com/

[email protected]