Swiz Framework

Написано 26/07/2009

Наткнулся тут на обсуждение нового (для меня) flex-фреймуорка – Swiz Framework. Идеи, которые вложили в проект Крис Скотт, Сонке Ройдэ и Бен Клинкинбирд вполне заслуживают изучения.

Во-первых, Swiz использует принцип “инверсия управления” (IoC) – то есть уменьшения связанности ((Кстати, есть такой интересный проект – MIoC (Metadata-driven autowire IoC framework для ActionScript 3) – разработанный Ильёй Шульманом из Яндекса (если я ничего не напутал), и я вам крайне рекомендую с ним ознакомиться)), типичный пример которого выглядит так: вот обычный код:

public class serverFacade
{
  public Object respondToRequest(Object pRequest)
  {
    if(businessLayer.validateRequest(pRequest))
    {
      DAO.getData(pRequest);
      return aspect.convertData(pRequest);
    }
    else
    {
      return null;
    }
  }
}

Который вполне превращается и в такую вариацию:

public class serverFacade
{
  public Object respondToRequest(Object pRequest)
  {
    return DAO.getData(pRequest);
  }
}

Так вот, суть этого принципа в том, что вы снабжаете ваши “пазлы” метаданными, а система – в данном случае Swiz – соберет все в единую “картину” – то есть приложение. И сделает это весьма быстро. А это очень удобно, когда вам надо собрать большие и сложные компоненты или системы, состоящие из множества классов, да и еще используя при этом особенности виртуальной машины ActionScript и стандартных компиляторов.

//Надеюсь, я понятно изъясняюсь? А то бывает, что я начинаю слишком заумно говорить и сам перестаю улавливать суть, к чему я всё веду. 🙂

Ещё одним принципом на котором держится этот flex-фреймуорк является “внедрение зависимости” (DI) – специфичной формы IoC, суть которой – получение необходимой зависимости путём изменения порядка связи.

Приятной особенностью Swiz является отсутствие ручных вызовов addEventListene() и removeEventListener() – вы просто пишите стандартный метод, указываете параметр, а фреймуорк сам определит какие методы вызывать, а также какие параметры передавать. И это без каких-либо специфичных событий – только обычные flex-события!

И это при том, что Swiz конфигурируется одним-единственным тегом, приблизительно вот так:

<swiz:SwizConfig
        strict="true"
        mediateBubbledEvents="true"
        eventPackages="com.benclinkinbeard.events"
        viewPackages="com.benclinkinbeard.views"
        beanLoaders="{ [ Beans ] }" />

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

Отлично и то, что Swiz дружит Flex 2/3/4, прекрасно чувствует себя с AIR, да и вообще, крайне прост в освоении.