Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Глобальные переменные (http://www.flasher.ru/forum/showthread.php?t=199572)

zipimp 20.05.2013 23:48

Глобальные переменные
 
Здравствуйте. Я новичок в AS 3. Хотелось бы разобраться как глобально объявить переменную и впоследствие её использовать.

Вычитал здесь http://stackoverflow.com/questions/9...n-actionscript как это можно сделать.

Скачал простейший баннер отсюда http://www.web-article.com.ua/2009/a...anner-ssylkoj/

Создал в папке с fla файлом файл Globe.as следующего содержания

Код AS3:

package
{
    public var MyGlobal:String = "bla";
}

В самом баннере

Код AS3:

mybanlink.addEventListener(MouseEvent.CLICK, mybanlinkClickListener);
 
function mybanlinkClickListener(e:MouseEvent):void {
        trace(MyGlobal);
        var url:String="http://www.web-article.com.ua";
        var urlRequest:URLRequest=new URLRequest(url);
        navigateToURL(urlRequest);
}

На что мне пишут: "Scene 1, слой "actions", кадр 1, строка 7 1120: Обращение несуществующего свойства MyGlobal." Хотя IntelliSence видит эту глобальную переменную и подсказывает когда я её начинаю набирать.

Подскажите, что я делаю не так. Рабочая среда Flash Proffesional CS6

Котяра 21.05.2013 00:24

Не надо вам глобальные переменные пока. Особенно.

caseyryan 21.05.2013 07:33

Цитата:

Создал в папке с fla файлом файл Globe.as следующего содержания
файл должен называться не Globe.as в данном случае, а MyGlobal.as (о чем кстати там на стековерфлоу и написано, внимательнее надо читать)

А вообще, плюсую к посту котяры. Не надо делать глобальных переменных.

AlexCooper 21.05.2013 12:39

Можно сделать так
Код AS3:

package inpictures.data {
 
        import inpictures.view.GUI;
        import service.AMF3;
 
        public class GlobalVars extends Object {
 
                public function GlobalVars() {
                }
 
                {
                        lang = new Language();
 
                        account = new Account();
 
                        core = new Core();
 
                        gui = new GUI();
 
                        lib = new Library();
 
                        times = new Times();
 
                        cache = new Cache();
 
                        methods = new APIMethods();
 
                        handler = new AMF();
                }
 
                public static var lang:Language;
 
                public static var handler:AMF;
 
                public static var account:Account;
 
                public static var amf:AMF3;
 
                public static var gui:GUI;
 
                public static var core:Core;
 
                public static var lib:Library;
 
                public static var methods:APIMethods;
 
                public static var times:Times;
 
                public static var cache:Cache;
 
        }
 
}

Код AS3:

package inpictures.data {
 
        public class Times extends Object {
 
                public function Times() {
 
                }
 
                public var server:Number = 0;
 
                public var client:Number = 0;
 
                public var sync:Number = 0;
 
                public function get now():Number {
                        return Math.round(new Date().getTime()/1000)+sync;
                }
 
        }
 
}


caseyryan 21.05.2013 14:31

AlexCooper, в чем прикол ставить статический инициализатор, если можно сразу инициализировать переменные? Выпендреж?
Только лишнюю путаницу создает.

GBee 21.05.2013 18:59

Цитата:

Сообщение от caseyryan (Сообщение 1134168)
AlexCooper, в чем прикол ставить статический инициализатор, если можно сразу инициализировать переменные? Выпендреж?
Только лишнюю путаницу создает.

Возможно следует соблюдать порядок создания. Кто знает, там может Language использует данные, которые подгружаются откуда-то и т.п.

caseyryan 21.05.2013 19:08

Цитата:

Кто знает, там может Language использует данные, которые подгружаются откуда-то и т.п.
Это что-то меняет?
Хотя да.. могу представить себе такую ситуацию. Тогда тем более лучше этого не делать )) к еще большей путанице приведет.

GBee 21.05.2013 19:49

Цитата:

Тогда тем более лучше этого не делать ))
Это уже другой вопрос :о)

AlexCooper 21.05.2013 21:42

Вы имеете ввиду этот блок?
Код AS3:

{
                        lang = new Language();
 
                        account = new Account();
 
                        core = new Core();
 
                        gui = new GUI();
 
                        lib = new Library();
 
                        times = new Times();
 
                        cache = new Cache();
 
                        methods = new APIMethods();
 
                        handler = new AMF();
                }

в действительности никакой путаници не произойдет. Класс Core управляет всем.
Код 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} );

и откроется окно с жалобой на пользователя. Не пойму в чем моя ошибка по Вашему мнению

zipimp 21.05.2013 22:31

Цитата:

Сообщение от caseyryan (Сообщение 1134128)
файл должен называться не Globe.as в данном случае, а MyGlobal.as (о чем кстати там на стековерфлоу и написано, внимательнее надо читать)

А вообще, плюсую к посту котяры. Не надо делать глобальных переменных.

Как я понял файл называть можно как угодно, пакет то анонимный.
Я знаю что это некрасиво плохо и прочее, но вопрос у меня стоит именно в этом, чтобы иметь глобальную переменную, которая была бы видна и из обработчиков, везде вобщем. Через анонимный пакет так же можно сделать, чтобы даже нигде не нужно было импортов делать.

caseyryan 21.05.2013 22:35

Цитата:

Как я понял файл называть можно как угодно
Нет, это не правда. Файл должен называться так же как переменная или функция внутри.
Возможно это косяк допущенный адобовцами, но тем не менее.
Цитата:

но вопрос у меня стоит именно в этом, чтобы иметь глобальную переменную, которая была бы видна и из обработчиков, везде вобщем.
Тогда действительно лучше сделать класс с публичной статической переменной и не париться.
Код AS3:

package {
  public class Globals {
      public static var SOME_VAR:String = "someValue";
  }
}

Обращаться к ней просто, в любом месте
Код AS3:

trace(Globals.SOME_VAR);

Цитата:

Не пойму в чем моя ошибка по Вашему мнению
Про ошибку никто не говорит. Я имел в виду другое.
Зачем делать так:
Код AS3:

package inpictures.data {
 
        import inpictures.view.GUI;
        import service.AMF3;
 
        public class GlobalVars extends Object {
 
                public function GlobalVars() {
                }
 
                {
                        lang = new Language();
                }
 
                public static var lang:Language;
 
        }
 
}

Когда можно так:
Код AS3:

package inpictures.data {
 
        import inpictures.view.GUI;
        import service.AMF3;
 
        public class GlobalVars extends Object {
 
                public static var lang:Language = new Language();
 
        }
 
}

То есть обойтись без явного определения статического инициализатора

AlexCooper 21.05.2013 23:08

Цитата:

Сообщение от caseyryan (Сообщение 1134252)
То есть обойтись без явного определения статического инициализатора

Согласен, ранее использовал такую конструкцию когда вместо
Код AS3:

{
lang = new Language();
}

было
Код AS3:

server_url='site.com'
// etc...

и эта конструкция позволяла видеть все конфигурационные данные в одном месте. Скрипт рефакторился а конструкция осталась.

zipimp 21.05.2013 23:11

Вот ещё пост http://zanuzawa.blogspot.ru/2012/01/...ipt-3-as3.html Блин такое чувство, что сам Flash Proffesional не подсасывает все эти классы, но вот Intellisence видит же....

in4core 21.05.2013 23:12

Цитата:

GlobalVars.core.logic(GlobalVars.core.COMPLAINT_USER, {'uid':$uid,'remove':this} );
Это ужасно - пересмотрите ваше видение - ПОЛНОСТЬЮ!

AlexCooper 21.05.2013 23:32

Цитата:

Сообщение от in4core (Сообщение 1134256)
Это ужасно - пересмотрите ваше видение - ПОЛНОСТЬЮ!

Не могу не согласиться с тем что с ооп есть свои трудности в понимании. "Просветите" как нужно, легкий пример.

Добавлено через 30 секунд
и собственно в чем ужас.

Добавлено через 1 минуту
век живи - век учись)

in4core 22.05.2013 13:53

Цитата:

соответственно в любом месте мне достаточно вызвать
Код AS3:
GlobalVars.core.logic(GlobalVars.core.COMPLAINT_USER, {'uid':$uid,'remove':this} );
и откроется окно с жалобой на пользователя. Не пойму в чем моя ошибка по Вашему мнению
Код AS3:

HintManager.showHint(HintManager.SUCK_USER)

Например так. А не ехать через деревню в лес, а потом в город, когда в город быстрее через мост.
Зачем передавать какие то уиды туда и ремовы? Это все должно быть уже заточено в функционале хинта. Названия методов - ужасны, 3йной путь , как я уже сказал - бредовый

AlexCooper 22.05.2013 14:39

это при условии что пользователь управление производит мышью. Мне бы хотелось посмотреть конкретно само "ядро" приложения. То-есть какой Вы используете алгоритм центральным управлением приложений.

in4core 23.05.2013 04:03

Цитата:

Вы используете алгоритм центральным управлением приложений.
MVC, какой же еще

AlexCooper 23.05.2013 13:36

Цитата:

Сообщение от in4core (Сообщение 1134430)
MVC, какой же еще

Я его использую и так ссылок, самому как-то дошло, вопрос только был в другом.
Цитата:

Это ужасно - пересмотрите ваше видение - ПОЛНОСТЬЮ!
Просто закрепите как бы свои слова, надо же понимать тогда как нужно и в чем собственно у меня по вашему мнению неправильное виденье. Название функций и методов, ну это не считаю какой-то глобальной проблемой для пересмотрения виденья, то что использую статические классы, мне лично так удобно читается удобно, все централизировано, более того не ошибёшься какой метод за что отвечает, IDE подскажет, то что пихаю переменные дык что здесь плохого? Можно больше конкретики вместо абстрактного понятия и ссыланием на шаблоны.

СлаваRa 23.05.2013 13:49

Код AS3:

WindowsManager.open(WindowEnum.MAIN_MENU);
WindowsManager.alert(AlertEnum.ERROR);
ResourceManager.getResource(ResNameEnum.ARP, ResNameEnum.MAIN_MENU_BACKGROUND);
Validate.stringIsNullOrEmpty(someString);

вот в таком ключе использую, но не больше, остальное обходится без глобальных точек доступа, синглтонов и т.п.

in4core 23.05.2013 15:22

СлаваRa - собственно что я и написал

AlexCooper 25.05.2013 11:55

Цитата:

Сообщение от СлаваRa (Сообщение 1134463)
Код AS3:

WindowsManager.open(WindowEnum.MAIN_MENU);
WindowsManager.alert(AlertEnum.ERROR);
ResourceManager.getResource(ResNameEnum.ARP, ResNameEnum.MAIN_MENU_BACKGROUND);
Validate.stringIsNullOrEmpty(someString);

вот в таком ключе использую, но не больше, остальное обходится без глобальных точек доступа, синглтонов и т.п.

спасибо за установку.
Логика получается у Вас разбросана, есть исполняющие методы которые Вы вызываете и там же (где вызывали) обрабатываете информацию, я правильно понял?

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

Psycho Tiger 25.05.2013 13:51

Цитата:

к примеру если нужно обработать клик пользователя, после чего отправить данные с полей на сервер, принять, закешировать и вывести.
Ну вообще, я бы делал так (писал в браузере, сори за возможные ошибки):

Код AS3:

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; //данные здесь уже разложены в удобные для работы места с удобными типами и т.д.
}


AlexCooper 25.05.2013 16:04

спасибо, приму к сведению.

Но в чем минус моего решения?
Код 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-элементы уже работаю с листнерами и диспатчами. Так же могу посмотреть на каждый обработчик, данные пользователя, методы работы с сервером тоже в едином месте.

В чем минус такого решения?

in4core 25.05.2013 16:46

Цитата:

Так же могу посмотреть на каждый обработчик, данные пользователя, методы работы с сервером тоже в едином месте.
Именно в этом.
ООП - есть разумное разграничение логики от данных

AlexCooper 25.05.2013 16:55

Цитата:

Сообщение от in4core (Сообщение 1134777)
Именно в этом.
ООП - есть разумное разграничение логики от данных

это мне ничего не объяснило. Имелось в виду что есть класс обработчики, класс пользователь, гуи и т.д (не весь код в едином месте, а по группируются по схожести) . Только управляется все с "ядра" и "ядро" запускает уже "классы-подрядчики".

Babylon 25.05.2013 17:59

AlexCooper, самый большой минус - это инкапсулированность тех функций, которые не должны быть инкапсулированны. Если вы разработчик - одиночка то пофик, что вы творите со своим г/к. Возьмите за пример Drupal 7 и вы поймете разницу. Там есть тоже ядро, модули, виды, хуки, типы данных,темы .

Bgg 25.05.2013 19:52

Цитата:

Сообщение от AlexCooper (Сообщение 1134771)
в любом месте мне достаточно вызвать
GlobalVars.core.logic(GlobalVars.core.COMPLAINT_USER, {'uid':$uid,'remove':this} );
...
В чем минус такого решения?

1. Код с "сырыми" объектами никогда не будет гибким. А если COMPLAINT_USER потребуется объект с новым полем? Будете по всему проекту искать и добавлять? "Современные умные IDE" - не аргумент.
2. Свитч в методе logic может разрастись во много сотен строк монотонного кода.
3. Код с упоминанием GlobalVars.core.* станет не переносимым. Например, небольшой пакет из 5-10 классов заточенный выполнять какую-либо конкретную задачу не получится просто вытащить из репозитория и тут же начать использовать в новом проекте. Нужно будет либо удалять GlobalVars.core.*, либо тащить в новый проект GlobalVars.

Все зависит конечно от контекста, и возможно в вашем конкретном случае все это оправдано, но как правило концентрация логики в какой-то одной глобальной точке ни к чему хорошему не приводит.

AlexCooper 25.05.2013 21:06

Цитата:

Сообщение от Babylon (Сообщение 1134795)
Возьмите за пример Drupal 7 и вы поймете разницу.

Обязательно посмотрю

Цитата:

Сообщение от Bgg (Сообщение 1134809)
1. Код с "сырыми" объектами никогда не будет гибким. А если COMPLAINT_USER потребуется объект с новым полем? Будете по всему проекту искать и добавлять? "Современные умные IDE" - не аргумент.

мне не нужна гибкость, гибкость поддерживается на низком уровне, имеется ввиду классы по работе с сервером, гуи и т.д.,

Цитата:

Сообщение от Bgg (Сообщение 1134809)
2. Свитч в методе logic может разрастись во много сотен строк монотонного кода.

это явный минус в плане роста, но а как по другому, логика собранная в одном месте для меня как инструкция по использованию. Хотя с другой стороны согласен что 1000 case это 1000 операций сравнивания.

Цитата:

Сообщение от Bgg (Сообщение 1134809)
3. Код с упоминанием GlobalVars.core.* станет не переносимым. Например, небольшой пакет из 5-10 классов заточенный выполнять какую-либо конкретную задачу не получится просто вытащить из репозитория и тут же начать использовать в новом проекте. Нужно будет либо удалять GlobalVars.core.*, либо тащить в новый проект GlobalVars.

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

Psycho Tiger 26.05.2013 03:08

Цитата:

Возьмите за пример Drupal 7 и вы поймете разницу.
Друпал, возможно, хорош. Но рекоммендовать что-то, что написанное на языке, в котором ожидают поджидают сюрпризы (например, а=б, б=в, а!=в. Сюрпрайз!) – вообще не стоит.

Babylon 26.05.2013 10:55

Drupal это не язык, а CMF . Написан на PHP. Речь скорее шла об архитектуре этого программного продукта. Используемые там понятия и подходы весьма неплохо использовать при проектировании flash приложений. Сравнивать синтаксис PHP vs AS3 некорректно. Впрочем это уже сделано до Вас...

Psycho Tiger 26.05.2013 11:56

Цитата:

рекоммендовать что-то, что написанное на языке
Цитата:

Drupal это не язык, а CMF . Написан на PHP.
Даже не знаю, как Вы так читаете мои сообщения, но речь не об этом.

Расскажите лучше, как Вы предлагаете изучать программный продукт без контекста языка, на котором он написан? Придется изучать язык, который не нужен, чтобы понять программный продукт в котором, возможно, содержится что-то полезное.
Только вот я сильно сомневаюсь в адекватности получения "неплохих понятий и подходов" с фреймворка для HTTP который, как известно, no-state-saving для флеш-приложения, который вполне себе state-saving. Не находите, что это настолько разное, что ну прям вообще? )

Babylon 26.05.2013 12:51

Как пишите так и читаю. Не нахожу смысла разводить холивар. Однако замечу - как спроектируешь систему, так потом и код напишешь.

Psycho Tiger 26.05.2013 13:21

Похоже, Вы не поняли меня. Попробую совсем на пальцах: основную мысль, которую я пытался донести, что приложения могут квалифицироваться на:
1) Работа по запросу (PHP работает только когда его пнёт веб-сервер, отработает, выплюнет результат и умрёт).
2) Работа в ограниченном промежутке времени – это как раз флеш-приложения.
3) В идеале, работающие постоянно. (сервера, возможно ОС).

Классификация весьма условна и неполна, но суть не в этом. HTTP не помнит что было раньше. Вообще не помнит. Никак. Для этого придуманы сессии, куки, хидден филды. Например, чтобы пользователь оставался залогиненным на сайте, нужно каждый раз при посещении страницы его заново аутентифицировать – скрыто, с помощью, например, куки.

Так вот чтобы сделать полноценный фреймворк для веба – нужно опираться на то, что есть. Флеш вполне может держать инстансы в памяти для одного конкретного юзера, поэтому мысль посыл один: авторизовать один раз, запомнить, использовать. Это самое начало, а уже имеем совершенно разные подходы.

ПХП должен выплюнуть страницу и умереть. Флеш должен полностью обрабатывать пользовательский ввод.
ПХП должен понаделать разных токен-хиден-филдов, чтобы протягивать нужные данные (типа CSRF-токенов), флеш помнит их всегда сам без изврата.
При разработке для безопасности на ПХП все данные должны тщательно проверяться и фильтроваться. Флеш живет по принципу "не моя забота, минимальный if, если плохо – сервер скажет".

Если капнуть чуть глубже, то можно заметить, что серверные технологии обязаны предусматривать такие сказочные штуки, как шардинг для реляционных баз, который обязан учитываться в архитектуре, потому что деваться некуда (сомневаюсь, что это забота ORM), модульность архитектуры, которую необходимо разрабатывать с возможностью middleware вставок и прочее. На клиенте это совсем сказки, у пользователя один компьютер, а не кластер.

Это говорит о некомпетентности попыток сравнивать то, что на серверах с тем, что на клиентах. Безусловно, design patterns и всё с этой оперы – это то что применяют для разработки в любой области и если речь о них – то о них можно почитать о них более конкретно, а не изучая фреймворк написанный на языке сомнительного запаха.
Отсюда могу заключить, что Вы – фанат Drupal.

Babylon 26.05.2013 13:27

Я фанат технологичности.

Psycho Tiger 26.05.2013 13:34

Цитата:

Сообщение от Babylon (Сообщение 1134896)
Я фанат технологичности.

Извините, но человек, программирующий на PHP, который позиционирует себя как фаната технологичности – это смешно )

За сим я удаляюсь.

AlexCooper 26.05.2013 13:47

Кто-то может выслать минимальный исходник для демонстрации построение системы в найболее оптимальном подходе в плане разработки. Желательно с централизацией логики.

Babylon 26.05.2013 13:50

Дык, можно на любом языке писать г/к. Drupal хороший пример развивающегося фреймворка.
Чего нельзя сказать про flash,Flex. AS3 и PHP OOП языки. Механизмы структуирования и отображения контента вполне себе можно сравнивать. Использование сущностей, агрегатирования, рендеринг контента в Drupal пошло бы на пользу и Flash. В Drupal массивы, в AS3 XML. Модулям можно поставить в соответствие RSL. Чем плохо? А Flex вообще изначально неправильно спроектирован. Но это мое мнение.

Добавлено через 3 минуты
Цитата:

Сообщение от AlexCooper (Сообщение 1134898)
Кто-то может выслать минимальный исходник для демонстрации построение системы в найболее оптимальном подходе в плане разработки. Желательно с централизацией логики.

Посмотри видеоуроки Артема Федорова

Psycho Tiger 26.05.2013 14:13

Цитата:

AS3 и PHP OOП языки.
Гкхм. Тут как раз тот случай, когда можно сказать "куда более ООП".
Цитата:

В Drupal массивы, в AS3 XML.
Вы так говорите, будто Drupal – это и не пхп вовсе )
Говоря за AS3, здесь есть всё, а не только XML. Удивительно, что Вы вспомнили только его.
Цитата:

Механизмы структуирования и отображения контента вполне себе можно сравнивать.
Да что Вы говорите ) Вью для сервера – это текст, который как-то там отобразит браузер. Всё структурирование и отображение контента – это шаблоны. В лучшем случае с лэйаутом и партиалами.
Вью для флеша... ну как бы сказать. Флеш это вообще – только вью.
Цитата:

Модулям можно поставить в соответствие RSL.
У меня одни дурацкие аналогии в голову лезут. В любом нормальном языке есть возможность распространения модулей пакетами. Вы отмечаете настолько общие и очевидные вещи для ЯП, что очевиднее только подметить одинаковые буквы, которыми код написан.
Кстати, куда круче вместо RSL использовать неэлитный getDefinition )
Цитата:

Использование сущностей
А что если я скажу Вам, что сущности – кусок триады MVC, которую в случае флеша и пхп можно вообще опустить? Причем, можно даже так: опустить её со стороны флеша – и всё ок, а вот моделька для серверных технологий – это уже стандарт?
Цитата:

агрегатирования
Да-да, Вы это уже подметили когда сказали что это ООП.

Цитата:

Дык, можно на любом языке писать г/к.
Ровно как и на очень плохих языках можно писать хорошие программы. Я Вам говорю что хорошего плотника должны мучать сомнения о существовании лучшего инструмента, чем тапок которыми он гвозди бьет.

Babylon 26.05.2013 14:47

Цитата:

Флеш это вообще – только вью.
Вот это, кстати, ключевая фраза для понимания того почему флеш находиться там где находится. Но даже во вью надо отображать данные. Потом эти вью структуировать, чтобы управлять ими. А для того чтобы структуировать виды надо их связать с XML. На основе XML можно построить любую модель данных с понятным и однозначным интерфейсом доступа к ним. Правильно реализовать модель данных на основе XML графа с уникальными id нод, с последующим рендерингом и фильтерингом на основе XPath запросов. Под видами я понимаю в том числе и компоненты. Ничего этого во флеше пока и близко нет и видимо не будет.


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

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