спасибо, приму к сведению.
Но в чем минус моего решения?
Код AS3:
public class Core {
public var ADD_BLACKLIST:String = 'add_blacklist';
public var COMPLAINT_USER:String = 'complaint_user';
public var COMPLAINT_USER_SEND:String = 'complaint_user_send';
public var CLOSE:String = 'close';
public var SEND_GIFT:String = 'send_gift';
public var INIT_REG:String = 'init_reg';
.....................
public function Core() {
...........
}
public function logic($cmd:String='', $data:Object=null):void {
trace('CMD: '+$cmd);
if ($data) {
trace('logic');
for ( var i in $data) {
trace(i+" >> "+$data[i]);
}
}
switch ($cmd) {
.....................
case ADD_BLACKLIST: {
GlobalVars.amf.toamf(GlobalVars.methods.addBlacklist, GlobalVars.handler.blacklistHandler, GlobalVars.account.amfSing($data));
} break;
case COMPLAINT_USER: {
GlobalVars.gui.attachToCentr(new Complaint($data),true);
} break;
case COMPLAINT_USER_SEND: {
$data.cmd = 'send';
GlobalVars.amf.toamf(GlobalVars.methods.sendToSupport, GlobalVars.handler.supportHandler, GlobalVars.account.amfSing($data));
} break;
.....
}
if ($data && $data.remove) GlobalVars.gui.remove($data.remove);
}
}
соответственно в любом месте мне достаточно вызвать
Код AS3:
GlobalVars.core.logic(GlobalVars.core.COMPLAINT_USER, {'uid':$uid,'remove':this} );
и откроется окно с жалобой на пользователя.
причем написав GlobalVars мне IDE подсветит возможные обработчики, к примеру пишу GlobalVars.core.logic, метод обработки логики (внешняя связь, GUI, обработка внутренних команд), после чего указываю GlobalVars.core.COMPLAINT_USER, что является командой и любые данные (в приемнике есть свой корректор на входящие данные). То-есть в плане глобальной логики мне нужно запомнить только GlobalVars. Идем дальше. В самом
Код AS3:
public function logic($cmd:String='', $data:Object=null):void {
// команда
switch ($cmd) {
.....................
// используется константа потому напутать что-то очень сложно
case ADD_BLACKLIST: {
GlobalVars.amf.toamf(GlobalVars.methods.addBlacklist, GlobalVars.handler.blacklistHandler, GlobalVars.account.amfSing($data));
// GlobalVars.amf.toamf - отправка данных на сервер
// GlobalVars.methods.addBlacklist - метод добавления в черный список
// GlobalVars.handler.blacklistHandler - обработчик данных с коректировкой данных связанных с черным списком (добавление, удаление, вывод )
// GlobalVars.account.amfSing - подпись пользователя
} break;
case COMPLAINT_USER: {
GlobalVars.gui.attachToCentr(new Complaint($data),true);
// GlobalVars.gui.attachToCentr - добавить на экран объект по центру
// new Complaint($data) - тут по сути должно быть получение экземпляра с библиотеки, но пока так. Создается класс в него сразу впихиваются данные для отображения.
// true - означает использовать ли блокировку заднего экрана
} break;
.....
}
if ($data && $data.remove) GlobalVars.gui.remove($data.remove);
}
таким образом я могу посмотреть всю логику приложения в одном месте, сами окна (gui-элементы уже работаю с листнерами и диспатчами. Так же могу посмотреть на каждый обработчик, данные пользователя, методы работы с сервером тоже в едином месте.
В чем минус такого решения?