|
|
|||||
Цитата:
Логика получается у Вас разбросана, есть исполняющие методы которые Вы вызываете и там же (где вызывали) обрабатываете информацию, я правильно понял? Добавлено через 1 минуту к примеру если нужно обработать клик пользователя, после чего отправить данные с полей на сервер, принять, закешировать и вывести.
__________________
return this... |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Цитата:
private function clickHandler(event:MouseEvent):void{ var someCommand:SomeCommand = new SomeCommand('some data may be'); someCommand.run(); //команда держит как-то статикой ссылку на соединение с сервером, но здесь этого не видно. Принцип Hide Complexity //на каждую команду - свой класс. //вариант 1: в команду передается всё необходимое (например, ссылка на вью) и по приходу данных от сервера команда сама делает "парсинг" и всё остальное. //т.е. каждая команда знает, что надо отправить на сервер и просит минимальное – что она не знает, и выполняется по ответу от сервера она тоже сама, //дёргая нужные методы у вьюхи и добавляя содержимое. //вариант 2: получили данные и делаем это дело в хэндлере someCommand.addEventListener(Event.COMPLETE, onCommandDataReceived); //вариант 3: два в одном, самый клёвый. Данные и парсятся, и стреляется событие. Если команду удобно "отпарсить" внутри её самой – она парсится там //и, откуда она вызвана не захламлется. Одна строчка new PingServer().run(); //найс! Ну, а если неудобно – вариантом 2. Иногда и там, и там – она и парсится, и дополнительно ещё здесь тянутся данные. Короче, как удобней, ну. } private function onCommandDataReceived(event:Event):void{ (event.currentTarget as SomeCommand).some_data; //данные здесь уже разложены в удобные для работы места с удобными типами и т.д. }
__________________
Тут мужик танцует и поёт про флэш |
|
|||||
спасибо, приму к сведению.
Но в чем минус моего решения? 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); } } причем написав GlobalVars мне IDE подсветит возможные обработчики, к примеру пишу GlobalVars.core.logic, метод обработки логики (внешняя связь, GUI, обработка внутренних команд), после чего указываю GlobalVars.core.COMPLAINT_USER, что является командой и любые данные (в приемнике есть свой корректор на входящие данные). То-есть в плане глобальной логики мне нужно запомнить только GlobalVars. Идем дальше. В самом 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); } В чем минус такого решения?
__________________
return this... Последний раз редактировалось AlexCooper; 25.05.2013 в 17:59. |
|
|||||
[+4 06.05.14]
|
Цитата:
ООП - есть разумное разграничение логики от данных
__________________
Марк Tween |
|
|||||
это мне ничего не объяснило. Имелось в виду что есть класс обработчики, класс пользователь, гуи и т.д (не весь код в едином месте, а по группируются по схожести) . Только управляется все с "ядра" и "ядро" запускает уже "классы-подрядчики".
__________________
return this... Последний раз редактировалось AlexCooper; 25.05.2013 в 18:02. |
|
|||||
[+1 25.10.13]
[+4 18.03.14] |
AlexCooper, самый большой минус - это инкапсулированность тех функций, которые не должны быть инкапсулированны. Если вы разработчик - одиночка то пофик, что вы творите со своим г/к. Возьмите за пример Drupal 7 и вы поймете разницу. Там есть тоже ядро, модули, виды, хуки, типы данных,темы .
|
|
|||||
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Цитата:
2. Свитч в методе logic может разрастись во много сотен строк монотонного кода. 3. Код с упоминанием GlobalVars.core.* станет не переносимым. Например, небольшой пакет из 5-10 классов заточенный выполнять какую-либо конкретную задачу не получится просто вытащить из репозитория и тут же начать использовать в новом проекте. Нужно будет либо удалять GlobalVars.core.*, либо тащить в новый проект GlobalVars. Все зависит конечно от контекста, и возможно в вашем конкретном случае все это оправдано, но как правило концентрация логики в какой-то одной глобальной точке ни к чему хорошему не приводит. |
|
|||||
Обязательно посмотрю
Цитата:
Цитата:
Цитата:
__________________
return this... |
|
|||||
блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
|
Цитата:
__________________
Тут мужик танцует и поёт про флэш |
Часовой пояс GMT +4, время: 04:15. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|