Интеграция с использованием flex 4 (MATE MVC) и MSMQ - PullRequest
1 голос
/ 14 января 2011

Я делаю приложение в воздухе (flex4), так как это мое первое приложение, мне нужно несколько советов, чтобы выполнить часть интеграции.

Вся интеграция между моей системой и внутренним сервером должнавсе будет сделано с использованием MSMQ, хорошо, я слышал некоторые библиотеки, которые я могу импортировать в свой проект flex для размещения и чтения сообщений в очереди MSMQ, но это не мой дублет, я хотел бы знать, как это хороший подход ксделать это сообщение, что я имею в виду, должен ли я иметь класс Actionscript, называемый, например, MSMQService, и там я должен иметь функции для помещения и чтения в очереди?или я должен создать новый пользовательский тег в Mate и создать отдельный файл EventMap только для интеграции ?!Я знаю, что есть много подходов, но если кто-то уже сделал это, я хотел бы знать, как вы, например, хорошие образцы.

Спасибо за помощь!

1 Ответ

1 голос
/ 15 января 2011

Во-первых, я никогда не использовал MSMQ, и мой ответ будет, как правило, для общения с Mate и сервером (из-за моей точки зрения и 3-месячного опыта).

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

Обзор структуры моего текущего проекта:

  • просмотр классов, отвечающих только за отображение пользовательского интерфейса, мы постарались не включать в них логику приложения.
  • классы контроллеров, один большой всевидящий eventMap и куча событий. eventMap включает логику для «what view.event запускает то, что model.function». В EventMap не должно быть НИКАКИХ вычислений или другой логики приложения.
  • modelMap отвечает за привязку однонаправленной связи между моделью и представлением, описывая, что должно измениться в классах представления (UI), когда что-то изменяется в модели. modelMap НЕ ДОЛЖЕН позволять классам представления напрямую манипулировать моделью, это противоречит принципам MVC
  • модель классов - классы, отвечающие за логику приложения. Также есть классы общения. Что-то вроде `ServerCommunicationManager, класс, отправляющий запросы GET / POST / tec и запрашивающий ответ

логика MATE:

1.) Некоторым классом View манипулируют, и это представление отправляет какое-то событие. Пример: пользователь с именем и паролем нажимает кнопку входа (RegisterScreen.mxml)

dispatchEvent(new UserRequest(UserRequest.AUTHENTICATION, name, password));

2.) Экземпляр eventMap получает событие в EventHandler и вызывает некоторый метод в классе ServerCommunicationManager. Пример:

<EventHandlers type="{UserRequest.AUTHENTICATION}">
   <MethodInvoker generator="ServerCommunicationManager"
                  method="signUser"
                  arguments="{[event.name, event.password]}" />
</EventHandlers>

3.) Метод класса модели вызывается. Пример: мой пример заглушен!

public function signUser(user:String, password:String):void
{
   var passwordEncoded:String = encodePassword(password);
   var jsonMessage:Object = new Object();
   jsonMessage.type = "checkUser";
   jsonMessage.name = name;
   jsonMessage.password = passwordEncoded;

   sendGetRequest(serverIP, json, receiveResponseHandler);
}

public function receiveResponseHandler(response:Object)
{
   var userDetails:UserDetails = decodeJsonToUser(response);

   if(userDetails is NoUser)
   {
      FlexGlobals.topLevelApplication.dispatchEvent(new ServerResponseEvent(ServerResponseEvent.NO_USER));
   }
   else if(userDetails is NormalUser)
   {
      FlexGlobals.topLevelApplication.dispatchEvent(new ServerResponseEvent(ServerResponseEvent.NORMAL_USER, userDetails));
   }
   else if(userDetails is Administrator){...} else ...
}

4.) Назад в EventMap

<EventHandlers type="{ServerResponseEvent.NORMAL_USER}">
   <PropertySetter generator="UserModel"
                   targetId="signedUser"
                   source="{event.userDetails}"/>
</EventHandlers>
<EventHandlers type="{ServerResponseEvent.NoUser}">
   <PropertySetter generator="UserModel"
                   targetId="signedUser"
                   source="null"/>
   <PropertySetter generator="ViewModel"
                   targetId="state"
                   source="loginDenied"/>
</EventHandlers>

А в modelMap:

<Injectors target="{RegisterScreen}">
    <PropertyInjector targetKey="state" 
                      source="{ViewModel}" 
                      sourceKey="state" />
    <PropertyInjector targetKey="userName" 
                      source="{UserModel}" 
                      sourceKey="signedUser"/>
</Injectors>

Обзор. При таком подходе вы можете успешно отделить классы представления от классов связи. Пока он работает стабильно в нашем проекте.

Редактировать: Поскольку я относительно новичок в Мате, если кто-то видит ошибки в моем подходе, он ДОЛЖЕН сделать комментарий об этом. Для меня действительно важно, если какая-то часть этой логики частично или полностью неверна.

...