![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1 25.10.13]
[+4 18.03.14] |
Правильно. Контроллеры общаются друг с другом посредством диспатчей, а обрабатывают события в хэндлерах, где и передают данные сервис<-> вид, либо сервис<->логика(модель).
Последний раз редактировалось Babylon; 10.01.2014 в 19:03. |
|
|||||
|
Цитата:
![]() Да и мне до сих пор система не понятна, а пример бы посмотрел. Теоретически должно адекватно смотреться в связке с флексом.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
[+1 25.10.13]
[+4 18.03.14] |
Я учёл пожелания. Теперь у меня по другому сделано. Есть дикт из коллекций MVC которые имеют свойства INodeIn и INodeOut c интерфейсом INode, где INode может быть либо XML, либо JSON. Пока еще не допилено...
Последний раз редактировалось Babylon; 10.01.2014 в 19:20. |
|
|||||
|
Цитата:
Цитата:
Недавно наводил порядки там и выпилил немного костыльного функционала, в том числе и криво написанный хттп-коннектор, в итоге там остался реализован только сокет(хттп уже давно не использовал, так я и не переживал). Но я планировал добавить туда и хттп-коннектор. Возможно как раз будет повод. Я честно вот сегодня пытался на костылях нечто собрать чтоб сюда скинуть, но костыли мне не понравились. Сделаю адекватно, расширю функционал своего пакета. Можно за репозиторием следить. Добавлено через 4 минуты Костыли частично показать могу: Абстрактная команда. Ее расширяют наши остальные конкретные команды. package connector.commands { import flash.events.Event; import flash.events.EventDispatcher; import flash.events.IOErrorEvent; import flash.net.URLLoader; import flash.net.URLRequest; import project.model.SomeModel; internal class Command extends EventDispatcher { protected static const SERVER_URL:String = "http://your.server.url/"; protected var _urlLoader:URLLoader = new URLLoader(); protected var _urlRequest:URLRequest = new URLRequest(); // Каким-то образом ссылка на модель должна попасть в команду. // не хочу об этом думать. new SomeModel точно не конает, потмоу что она должна быть одна у всех. // Но это как вариант, и абсолютно не факт что ссылка на модель будет в базовой команде. // так как каждая команда скорее всего будет работать с другой моделью. protected var _model:SomeModel = new SomeModel(); final public function execute(data:Object):void { prepareLoader(data); _urlLoader.addEventListener(Event.COMPLETE, onRequestComplete); _urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onError); _urlLoader.load(_urlRequest); } protected function prepareLoader(data:Object):void { throw new Error("Should be overriden by sub classes"); } protected function processData(data:Object):void { throw new Error("Should be overriden by sub classes"); } private function onRequestComplete(e:Event):void { _urlLoader.removeEventListener(Event.COMPLETE, onRequestComplete); _urlLoader.removeEventListener(IOErrorEvent.IO_ERROR, onError); processData(_urlLoader.data); } private function onError(event:IOErrorEvent):void { trace("error"); } } } package connector.commands { import project.model.data.AuthResponceDo; internal class AuthCommand extends Command { private static const SERVICE_URL:String = "auth.php"; override protected function prepareLoader(data:Object):void { // Эта команда простенькая, ниче настраивать не надо кроме урла. _urlRequest.url = Command.SERVER_URL + SERVICE_URL; } override protected function processData(data:Object):void { // парсинг будет совсем не такой, так как понятно что с сервера прилетит не этот тип Если у нас не амф. // для примера покатит. var parcedData:AuthResponceDo = data as AuthResponceDo; // Здесь просто вызывается метод модели. Но может быть любой другой набор действий. _model.auth(parcedData); } } } package connector.commands { import connector.commands.data.BattleTurnDto; import flash.net.URLRequestMethod; import flash.net.URLVariables; import project.model.data.TurnResponceDo; internal class BattleTurnCommand extends Command { private static const SERVICE_URL:String = "battle_turn.php"; override protected function prepareLoader(data:Object):void { // тут команда посложнее, и она шлет во флешварах данные. var dto:BattleTurnDto = data as BattleTurnDto; if (!dto) throw new Error("а нифига, надо передать BattleTurnDto"); _urlRequest.url = Command.SERVER_URL + SERVICE_URL; var variables:URLVariables = new URLVariables(); variables.battle_id = dto.battle_id; variables.unit_id = dto.unit_id; _urlRequest.data = variables; _urlRequest.method = URLRequestMethod.GET; } override protected function processData(data:Object):void { // см. авторизацию. Суть та же. Это фейк. var parcedData:TurnResponceDo = data as TurnResponceDo; _model.turn(parcedData); } } } package connector.commands.data { public class BattleTurnDto { public var battle_id:String; public var unit_id:String; } } Эта часть сравнительно не костыльная получилась и надеюсь идею передал. А вот по части менеджмента этих команд уже есть варианты. И с этими вариантами начались костыли на решение которых я уже не захотел тратить больше времени чем планировал. Добавлено через 11 минут Вот пример использования костыльного манагера, который я показывать не хочу ![]()
__________________
Кто к нам с чем для чего - тот у нас того от того. Последний раз редактировалось Dukobpa3; 11.01.2014 в 16:04. |
|
|||||
|
Цитата:
Такой подход ты считаешь костыльным?
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
Это не JQuery, а method chaining
![]() Можешь набросать примерно, как с точки зрения пользовательского кода выглядит хорошая на твой взгляд система?
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
|
[+4 06.05.14]
|
Я думаю не сможет.
Тут сам по себе подход сервера убог, а значит сделать под него хорошую систему уже не получится. Как мне кажется не стоит выдумывать какие то велосипеды на клиенте, когда сервер-сайд хренов. Надо менять сервер. В момем случае стояла задача сделать БЫСТРО, и чтобы работало. 3-5 дней на реализацию подкладки. Понятное дело, если бы сроки были приемлимые, можно было бы сделать нормальтной эко систему, но тут пришлось безоговорочно работать с тем, что написано уже давно.
__________________
Марк Tween |
|
|||||
|
Цитата:
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
|
[+4 06.05.14]
|
GBee - если ты работаешь с медиа серверами например, у тебя есть серверные методы и сообщения. Там все понятно. Если ты работаешь с серверами типа пхп - то тут сложнее, и требуется удобная организация сервера - когда ты делаешь запрос, в ответе ты должен получать command:What_the_fox_say - чтобы значть на какую конкретно команду пришел ответ. Это не странность - это нормальность. Я же не несу фигни типа - ну а почему на сервере переменную назвали коряво? Это не мое дело. Мое дело получить ответ, который будет понятен и читабелен.
Потрачено.
__________________
Марк Tween |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:31. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|