Форум 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=187576)

AlexLucas 21.11.2012 14:02

Организация классов в проекте
 
Доброго времени суток.
У меня появилась проблема - есть 2 проекта, один подгружается в другой, общаются друг с другом через интерфейсы. Дело в том, что некоторые функции интерфейсов возвращают объекты классов которые есть в одном проекте, но нет в другом, а интерфейсы общие:

Код:

Interfaces
-INterface1
-INterface2
Project1
-Class1
-Class2  = Main Class
Project2
-Class3
-Class4  = Main Class

И в INterface1 есть такое :
Код AS3:

public interface INterface1 {
    function get someComponent():Class1;
}

Class2 имплементит Interface1, и в Project2 , через интерфейс вызывается его геттер someComponent().
При компиляции Project2, мне естественно выдаёт
Код:

Type was not found or was not a compile-time constant: Class1
Я нашёл пока 2 выхода, и оба мне не нравятся - указать по всему проекту Class Path (как к папке с интерфейсами), но т.к. таких вот прожектов у меня очень много, придётся проекты зафлудить Class Path'ами, я не знаю хорошо это или нет?
Или чтобы метод в интерфейсе возвращал '*' . В принципе сейчас таки делаю, но по идее если кто после меня будет дописывать что-то, через довольно короткое время он захочет меня найти и придушить :) , т.к. автокомплита нет, и все ошибки в рантайме будут выскакивать.
Может есть другой выход?

FlashRus 21.11.2012 14:19

Заведите абстрактный класс, от которого будет происходить ваш Class1 и возвращайте его в геттере.
Или я не понял сути проблемы?

AlexLucas 21.11.2012 14:39

Суть в том что классы Class1 и Class2 не видны в Project2, но они используются в интерфейсах. И когда я использую интерфейсы в Project2, мне выдаёт ошибку что нет таких классов - Class1 и Class2.
А чем поможет завести абстрактный класс для Class1?
Скорее всего придётся для Class1 делать отдельный интерфейс.

FlashRus 21.11.2012 15:16

Цитата:

ошибку что нет таких классов - Class1 и Class2.
Ну это вполне нормальное поведение. Собственно, что ещё компилятор должен сказать увидев класс о котором он не слухом - не духом. Поэтому вам либо импортировать в ваш второй проект эти классы, либо завести абстрактный класс, котрый и будет возвращать ваш геттер. Естественно, о нем должен знать каждый проект, в котором используются его дети...

AlexLucas 21.11.2012 15:35

Я понимаю что это естественное поведение, и я ищу самое простое решение. А почему абстрактные классы а не интерфейсы?

Wolsh 21.11.2012 15:47

Одно непонятно, что Вы собираетесь делать с компонентом неизвестного класса?
По-идее, если Вам действительно не нужно знать класс1 во втором проекте, то и общий Интерфейс просто не должен содержать методы, возвращающие этот тип. Можно завести метод, возвращающий тот же объект-компонент как понятный (и удобный) второму проекту тип, например DisplayObject, а неподходящий (не общий) метод не включать. Если этот метод нужен в Интерфейсе для первого проекта, то сделать второй, не общий, интерфейс, расширяющий первый этим "неудобным" методом.
А лучше вообще возвращать из методов интерфейсы, а не классы, раз уж такое разделение))

Добавлено через 52 секунды
Ну вот, пока писал, сами всё сообразили)))

caseyryan 21.11.2012 15:55

Цитата:

А почему абстрактные классы а не интерфейсы?
хм.. интересный вопрос. Учитывая что в ас3 вообще нет абстракции.
http://joshblog.net/2007/08/19/enfor...ctionscript-3/
По мне так лучше все-таки интерфейс создать.

П.с. пока читал тему, хотел ответить почти то же самое, что написал Wolsh )

FlashRus 21.11.2012 16:49

Цитата:

ас3 вообще нет абстракции
я имел ввиду абстрактную абстракцию)

wvxvw 21.11.2012 23:15

Если суть задачи в том, чтобы не дублировать класс в каждой флешке, т.как известно, что в рантайме кто-то только один его должен загрузить, то есть смысл подумать об RSL. Оно для того и предназначено, вобщем. Т.е. скомпилировать класс не использующийся в проекте в библиотеку swc, библиотеку добавить в проект как external-library. Но нужно не забыть, что класс из этой библиотеки кто-то должен загрузить, и, по возможности, раньше, чем он потребуется где-то в другом месте.

zuxul 22.11.2012 10:10

http://www.flasher.ru/forum/blog.php?b=317


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

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