![]() |
Проблемы с организацией модульности
Здравствуйте.
Уже 4 месяца разрабатываю проект, и пришел к выводу к данному моменту он слишком много стал весить и слишком долго компилироваться, поэтому возникла идея разделить его на модули. Поинтересовавшись как это можно сделать попробовал: вынес один из классов в отдельный FLA, вместе со связанными символами в библиотеке, сделал загрузчик, который получает определение класса из applicationDomain загружаемого модуля, и очень обрадовался когда обраружил что во первых все работает, а во вторых модуль очень быстро компилируеться. Думал "ух, наконецто не нужно будет компилировать проект целиком, как скорость разработки то увеличиться" (проект целиком копилируеться около 2х минут, и на это уходит больше часа в день), но внеся изменения в код, обнаружил, что изменеия при компиляции только модуля, без основного исходника, совершенно не происходят. Сначала не понимал в чем дело, но потом просмотрев код понял - судя по всему это из-за того, что в самом проекте я использую статические переменные класса, который ассоциирован с основным клипом модуля, думал что эта проблема решиться если ображаться к статическим переменным через ту, которой я присваиваю определение класса, но в этом случае при вызове модуля вылезает ошибка "невозможно вызвать объект со ссылко на null", и так везде где происходит обращение к статическим переменным. Что я собственно хочу узнать, так это есть ли способ обращаться к статическим переменным класса, определение которого получено при окончинии загрузки, методом getDifinition. И если можно то как? |
Вынужден вас огорчить, если вы используете в обоих модулях один и тот же класс, то его изменение требует перекомпиляции обоих модулей, иначе результаты будут мягко говоря неадекватными. лучший способ использовать интерфейсы для обмена "тычками" между модулями. По идее если у вас есть статический метод(переменная, константа) как только он инициирован в текущем приложении то последующая загрузка любого элемента приводит к тому, что он будет использовать уже существующую ссылку.
Кстати просвятите что значит Цитата:
|
Код привести уже не могу, откатил исходники в svn до рабочего состояния, ошибки вылетали такие:
Код AS3:
|
я напишу зачем нужны интерфейсы, а вы сами почитаете что они из себя представляют, ок?
у вас две флэшки приложение и подгружаемый модуль например, у приложения есть метод say(val:String):void а у модуля есть что сказать но нету метода say задача: по просьбе приложения модуль должен вызвать метод say приложения если у вас в приложении будут такие строки: Код AS3:
Код AS3:
и аналогично в модуле, вам нужно сделать так чтобы класс приложения не вшивалcя в модуль, но чтобы была возможность вызывать методы приложения Код AS3:
|
Не используйте CSX для компилирования кода и компиляция тормозить не будет. Флекс умеет компилирование по частям, потому все компиляции, кроме первой, намного быстрее.
|
бывают приложения таких размеров что компилировать их целиком в один swf вредно даже не потому что долго, а потому что незачем сразу загружать те модули которыми пользователь возможно и не собирается пользоваться, например уровни в игре
|
Я не говорю, что не надо делить на модули вообще. Но вот подгружать модули с кодом уже сомнительная выгода, чтоб код много весил надо умудриться. Ассеты (графика, какие-то координаты, настройки) - да, заметно сокращаем время загрузки и используемую память. Кстати, флэшевые порталы по крайней мере недавно любили, чтоб игры шли одним swf.
Ну и где много кода компилить в CSX - всяко изврат) |
неоднократно сталкивался с необходимостью делать подгружаемые модули с кодом
особенно это хорошо когда над каждым из модулей работают разные люди |
Спасибо за разъяснение, начинаю понимать, попробую задействовать.
И спасибо также за информацию о флэкс компиляторе, буду переходить на него |
Интерфейсы удобная штука в том плане, что позволяют вам задать отличительные признаки некоторого объекта, и чтобы объект мог реализовать этот интерфейс он должен реализовать все эти признаки(то бишь свойства и методы). Сами интерфейсы вы можете использовать как обычные переменные-объекты, обладающие указанными в интерфейсе признаками. И далее по тексту программы вы можете использовать такую переменную для работы как обычный объект.
например IMyIFace описывает что объект должен содержать методы Код AS3:
Код AS3:
Код AS3:
|
| Часовой пояс GMT +4, время: 10:24. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.