<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog Espeo Software &#187; mate</title>
	<atom:link href="http://blog.espeo.pl/tag/mate/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.espeo.pl</link>
	<description>O technologii i biznesie naszym zdaniem</description>
	<lastBuildDate>Mon, 05 Jul 2010 12:16:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mate Flex Framework</title>
		<link>http://blog.espeo.pl/2009/02/13/mate-flex-framework/</link>
		<comments>http://blog.espeo.pl/2009/02/13/mate-flex-framework/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 17:03:41 +0000</pubDate>
		<dc:creator>Michał Kalinowski</dc:creator>
				<category><![CDATA[technologia]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[mate]]></category>

		<guid isPermaLink="false">http://blog.espeo.pl/?p=95</guid>
		<description><![CDATA[Mate (wym. mate, nie mejt) jest Fleksowym frameworkiem, opartym na tagach (ang. tag-based) i sterowanym zdarzeniami (ang. event-driven). Używamy go w jednym z naszych projektów już od kilku miesięcy i z perspektywy tego czasu, chciałbym parę słów o nim napisać.
Celem Mate jest zaproponowanie prostego i skutecznego mechanizmu zorganizowania przepływu sterowania (ang. control flow) w stylu [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Mate Flex Framework" href="http://mate.asfusion.com/" target="_blank">Mate</a> (wym. <em>mate</em>, nie <em>mejt</em>) jest Fleksowym frameworkiem, opartym na tagach (ang. <em>tag-based</em>) i sterowanym zdarzeniami (ang. <em>event-driven</em>). Używamy go w jednym z naszych projektów już od kilku miesięcy i z perspektywy tego czasu, chciałbym parę słów o nim napisać.</p>
<p>Celem Mate jest zaproponowanie prostego i skutecznego mechanizmu zorganizowania przepływu sterowania (ang. <em>control flow</em>) w stylu MVC, z wykorzystaniem eventów Fleksa. Jest to jedna z głównych zalet Mate: zostaje wykorzystany już istniejący, sprawdzony i naturalny dla Fleksa mechanizm komunikacji między warstwami aplikacji. Framework nie wprowadza własnych rozwiązań, jeśli nie ma takiej potrzeby, co wspiera niezależność tworzonych modułów programowych.</p>
<p>Mate jest całkowicie przezroczysty z punktu widzenia aplikacji. Nie ma żadnych odniesień do klas frameworka zarówno w komponentach widoku, jak również biznesowych. Naturalnie, warstwa kontrolerów (w sensie MVC), musi być już powiązana z konkretną biblioteką i tak też jest w tym przypadku. Zastosowano jednak dość ciekawe rozwiązanie, polegające na zapisywaniu logiki sterowania w postaci tzw. map zdarzeń (ang. <em>event map</em>) definiowanych za pomocą XML. Określają one sekwencje poleceń do wykonania w odpowiedzi na wystąpienie konkretnych eventów. Przykładowo, nasza klasa zdarzenia mogłaby wyglądać tak:</p>
<pre>package pl.espeo
{
    import flash.events.Event;

    public class AuthEvent extends Event
    {
        public static const LOGIN:String = "loginAuthEvent";

        public var username:String;
        public var password:String;

        public function AuthEvent(type:String, bubbles:Boolean = true, cancelable:Boolean = false)
        {
            super(type, bubbles, cancelable);
        }
    }
}</pre>
<p>Blok przetwarzania dla tego zdarzenia mógłby wyglądać tak:</p>
<pre>&lt;EventMap ...&gt;

    &lt;EventHandlers type="{AuthEvent.LOGIN}"&gt;

        &lt;RemoteObjectInvoker instance="{authService}"
            method="loginRemoteMethod" arguments="{[event.username, event.password]}"&gt;

            &lt;resultHandlers&gt;

                &lt;MethodInvoker generator="{AuthManager}"
                    method="loginLocalMethod" arguments="{resultObject}"/&gt;

            &lt;/resultHandlers&gt;

        &lt;/RemoteObjectInvoker&gt;

    &lt;/EventHandlers&gt;

&lt;/EventMap&gt;</pre>
<p>Jeśli gdziekolwiek w naszej aplikacji zostanie &#8220;wyrzucony&#8221; event o typie <code>AuthEvent.LOGIN</code>, zostanie wykonany odpowiedni kod z mapy zdarzeń, który w tym przypadku wywołuje metodę <code>loginRemoteMethod</code> zdalnego obiektu <code>authService</code>, przekazując 2 argumenty: <code>username</code> oraz <code>password</code>. Po otrzymaniu wyniku tego wywołania, zostanie on następnie przekazany jako argument metody <code>loginLocalMethod</code> obiektu klasy <code>AuthManager</code>, która zrealizuje jakąś logikę związaną z obsługą wyniku logowania. Takie podejście często określa się mianem MVCS, gdzie to dodatkowe S oznacza Service. Mate promuje taką architekturę, oferując znaczniki obsługujące nie tylko zdalne obiekty, ale również WebService&#8217;y oraz dowolne inne usługi HTTP (np. w konwencji REST). Diagram przepływu sterowania w opisanym scenariuszu wygląda tak:</p>
<p><img class="alignnone size-full wp-image-110" title="mate_one_way_communication" src="http://espeo.files.wordpress.com/2009/02/mate_one_way_communication.png" alt="mate_one_way_communication" width="500" height="378" /></p>
<p>Jest to przypadek stosunkowo prosty. Możliwości Mate w zakresie kontroli przepływu sterowania są znacznie bardziej rozbudowane; jest np. możliwość zdefiniowania metody obsługi błędów zdalnych usług albo wywołanie odpowiednich metod logiki widoku w zależności od wyniku wykonania metod logiki biznesowej. Jeśli konieczne jest zaimplementowanie czegoś naprawdę skomplikowanego, na co tagi Mate mogą nie pozwolić, zawsze można napisać własną metodę w ActionScript i wydelegować przetwarzanie do niej. Możliwości są tutaj w zasadzie nieograniczone. Kolejny wielki plus Mate: bardzo duża elastyczność.</p>
<p>Oprócz realizacji architektury MVC(S), Mate zapewnia również implementację mechanizmu wstrzykiwania zależności (ang. <em>dependency injection</em>). Ponownie, nie ma tutaj ingerencji we właściwy kod logiki biznesowej czy widoku; zależności do wstrzyknięcia definiuje się w mapach zdarzeń. Mate oferuje tutaj jedynie sposób deklaratywnego opisu powiązań między obiektami. Właściwe wstrzykiwanie jest po stronie Fleksa i jego atrybutu <code>[Bindable]</code>. To kolejny przykład nieinwazyjności tego frameworka. Jeśli platforma programowa realizuje jakąś funkcjonalność dobrze, po co to powielać? Spójrzmy, jak łatwo w Mate wstrzykuje się obiekt bieżącej sesji (pole <code>currentSession</code> obiektu klasy <code>SessionManager</code>) do menedżera autoryzacji (pole <code>session</code> obiektu klasy <code>AuthManager</code>):</p>
<pre>&lt;EventMap ...&gt;

    &lt;Injectors target="{AuthManager}"&gt;

        &lt;PropertyInjector source="{SessionManager}"
            sourceKey="currentSession" targetKey="session" /&gt;

    &lt;/Injectors&gt;

&lt;/EventMap&gt;</pre>
<p>Podsumowując, Mate to naprawdę świetny pomysł na wprowadzenie do własnego projektu dobrej, spójnej architektury MVC. Promuje najlepsze praktyki rozwiązywania typowych problemów, występujących w każdej aplikacji, np. problemu zależności między komponentami z rozwiązaniem w postaci wstrzykiwania zależności. Zapewnia ogromną elastyczność, pozwalając w elegancki sposób wspomóc framework własnym kodem w ActionScript, jeżeli dostarczone tagi okażą się niewystarczające. Jest przy tym całkowicie nieinwazyjny, przez co komponenty widoku i logiki biznesowej mogą być ponownie wykorzystane.</p>
<p>Mimo młodego wieku, Mate oferuje naprawdę dużą funkcjonalność, która jest cały czas rozszerzana. Śledząc stronę projektu i jego forum, można przekonać się, że projekt żyje, jest rozwijany, a społeczność zadowolonych programistów-użytkowników Mate nieustannie się powiększa. Myślę, że warto się nim zainteresować. Już teraz jest bardzo poważnym konkurentem takich rozwiązań jak <a title="Cairngorm" href="http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm" target="_blank">Cairngorm</a> czy <a title="PureMVC" href="http://puremvc.org/" target="_blank">PureMVC</a>. Jeśli projekt nie wytraci impetu to może już niedługo być najchętniej wybieranym frameworkiem dla nowopowstających projektów Fleksowych.</p>
<p>Gorąco zachęcam do odwiedzenia strony domowej projektu:<br />
<a title="http://mate.asfusion.com/" href="http://mate.asfusion.com/" target="_blank">http://mate.asfusion.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.espeo.pl/2009/02/13/mate-flex-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
