Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.07.2011, 01:53
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 1  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
По умолчанию Правильная организация контроллера в клиентском приложении

Приветствую, товарищи!
Значит, имеем механизм RPC, много бумажек с протоколами сервера, в которые входят серверные методы (которые нужно вызывать с клиента у сервера) и клиентские методы (которые нужно вызывать наоборот, с сервера у клиента). Их на самом деле очень много, у серверных, к тому же, первым аргументом нужно коллбэк подавать.

Также имеем приложение на MVC, базовый контроллер которого создает NetConnection-подключение, в качестве клиента передает себя и...содержит около 70 методов, как коллбэков, так и публичных-клиентских. Это не считая приватных методов, что получаются в ходе рефакторинга парсинга информации, что поступает с коллбэками.

Серверные методы я выделил в отдельный класс, обернул их в статик, так и вызываю. К слову, мне очень не нравится использовать в этом месте статику, но, видимо, деваться некуда. А вот что делать с этим большим количеством методов в контроллере - ума не приложу. Сейчас написаны только пустышки, а оно занимает около 600 строчек. Не comme il faut и вызывает судорогу.

Все коллбэки принимают параметр - строку/число, которую надо парсить/сравнивать, все данные пишутся в модель.

И вот вопрос: как лучше организовывать такие большие объемы методов?
__________________
тут я

Старый 18.07.2011, 02:05
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 2  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от КорДум Посмотреть сообщение
И вот вопрос: как лучше организовывать такие большие объемы методов?
Разбить их на классы))

Старый 18.07.2011, 02:09
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 3  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10

Было бы все так просто. Как я это вижу (оно еще ужаснее, чем то, что есть сейчас):
Класс(ы) для коллбэков, имеют ссылку на модель. Все методы статики.
Класс(ы) для публичных методов клиента, имеют ссылку на модель. Все методы статики.
В каждом классе свои приватные статичные методы, что получились в ходе рефакторинга (содержат парсинг данных). В каждом статическом методе вызывается другой статический метод из другого класса. Все это на статике - бррр. Перекрестная статика, ужасно же.

А вы что предлагаете?
__________________
тут я

Старый 18.07.2011, 02:31
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 4  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Я чесногоря не очень понимаю нафига тут статичные методы вообще. Я бы создал класс NetController, ссылка на который была бы в главном контроллере. NetController содержал бы эксземпляр класса NetConnection в котором были бы описаны все методы ваши эти. NetController парсил бы ответы от NetConnection и решал бы что отдать главному контроллеру посредством коллбеков или событий.

И не понятно что это за 70 методов. Их наверняка можно поделить на классы получения данных, инициализации объектов, сохранения данных на сервер.

Старый 18.07.2011, 02:35
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Ужасно )) а куда деваться ))) Сань я честно не вкурсе, с чего ты создал эту тему, твой подход вполне обоснованный. Проблема вся кроется в том, что тебя заставляют еще и парсинг данных делать - издеваются ))) Такая же бибоба у меня была на конях, ты код смотрел?
Есть класс работающий только на получение данных ( все статик ) и диспатчит приход этих данных ( там же идет парсинг ( подключаем доп класс внутрь ) , другой записывает и производит работу с этими данными ( создает фреймворк ). Если конечно хочется поизвращаться улучшить читабельность , то можно создать еще и менеджер данных, да и парсить там же.
Однако в твоем случае, есть еще небольшая проблема : некоторые методы отрабатывают напрямую во фреймворке, а вот некоторые в отдельных субКлассах . Завести общий диспатчер - можно, но нужно ли? Если создашь , то будешь из какого нить класса оповещать все модули об изменении, иначе же использовать перекрестный статик, в чем ничего плохого нету.
Код AS3:
SubClass A
....
FrameWork.call ('method1' , someCallBack);
_____
Class FrameWork
....constructor
_dispatcher.addEventListener ( m , someFunc )
....
function call(m:String , callBack:Function) {
     Server.call ( m )
    this._callback = callBack;
}
function someFunc(e:SomeEvent) {
    _callback(e.vars);
}
__________________
Марк Tween

Старый 18.07.2011, 02:42
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 6  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Коллбэки только принимают ответ от сервера, в котором содержится либо информация с рещультатом отработки метода на сервере, либо какая-то информация, которую следует окучить регуляркой для последующего заполнения модели.
Коллбэки с результатом выполнения метода нужны не просто так, в зависимости от этого я меняю либо вьюшку, либо вызываю какой-то серверный метод.

Так, значит создаем еще один коннект-контроллер в базовом контроллере, передаем ссылку на вьюшку и модель. В нем создаем отдельные контроллеры, в них передаем те же вьюшку и модель (кому что надо, в смысле), верно?
А парсинг-методы где живут? В коннект-контроллере?

А как быть с публичными методами клиента, которые вызывает сервер?

Добавлено через 1 минуту
Сань, ты же знаешь, у меня сейчас "чай с плюшками". Вот и выжимаю из проекта все, что можно. В данном случае для опыта, ну и для читабельности и разбыдлокодирования. Вот.

Добавлено через 2 минуты
И кстати да, у тебя методов серверно-клиентских, кажется, меньше раза в два, чем у меня.
__________________
тут я

Старый 18.07.2011, 02:55
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 7  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Бесит еще то что приходится и от сервера получать и самому его дергать. Получается двойная пляска по кочкам. В конях у меня только сервер меня дергал - и было пофигу, а тут приходится чуть подзапарится с разносом данных
__________________
Марк Tween

Старый 18.07.2011, 03:13
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 8  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Вы правда о лошадях говорите, или я что-то пропустил? =)

А вообще - можно же разбить колбеки на категории и завести, например, 7 классов, каждый с 10 методами. Гораздо удобнее, и синтаксис будет поприятнее
Код AS3:
// вариант когда все в одном месте
netController.updateModelUserPoints()
 
// вариант с 10 классами
netController.moel.user.updatePoints()
Мне второй вариант кажется выигрышным
__________________
...вселенская грусть

Старый 18.07.2011, 03:18
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 9  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
Вы правда о лошадях говорите, или я что-то пропустил? =)
Да-да, на самом деле. Я разглашать не буду
Цитата:
Мне второй вариант кажется выигрышным
То есть нужно мне вызывать вот так:
Код AS3:
СтатикСерверныйМетод(netController.moel.user.updatePoints, параметр1, параметр2)
? А как в случае с публичными клиентскими методами? Их тоже немало. Если только... сделать оболочку для них, указать в качестве клиента netConnection экземпляр оболочки. В методах оболочки вызывать методы, которые я расфасовал по разным классам?
__________________
тут я


Последний раз редактировалось КорДум; 18.07.2011 в 03:21.
Старый 18.07.2011, 03:31
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 10  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
А как в случае с публичными клиентскими методами?
Да точно так же. Делаешь несколько классов, создаешь несколько экземпляров, передаешь им ссылку на NetConnection. То есть, в данном случае NetConnection - это модель, в которую нужно правильно записать. Методы этих классов принимают разные параметры, форматируют их и отдают на сервер.

ЗЫ
На счет статиков - не понятно, зачем тут вообще они нужны? Ты же не лепишь статичные модели данных в своих приложениях? А чем NetConnection хуже? Короче, статик лучше оставить для констант, конфигов и прочей ерунды, которую ты точно не будешь использовать еще раз.
__________________
...вселенская грусть

Создать новую тему Ответ Часовой пояс GMT +4, время: 08:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 08:29.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.