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

booksmaster 07.01.2012 00:27

разбивка основного класса на модули
 
Как в Flex3 + AS3 вынести часть кода в отдельный модуль, а то все в одном слишком громоздко получается. Гуглю уже неделю, ничего по теме не нахожу.
Но не так, чтоб тольк остатические методы в отдельный класс, у меня таких почти нет, а чтоб именно методы основного класса с полной видимостью private variables and methods.

ProxyGreen 07.01.2012 00:57

Эммм... Куски кода класса вынести в другой файл, но что-бы это в итоге был один класс, а не разные?

Dukobpa3 07.01.2012 02:01

хрень какая-то на самом деле.

Если класс получается слишком громоздким то нужно подумать и поделить его на логические составляющие. Из каждой такой составляющей следует сделать отдельный класс, и наладить между ними взаимодействие.

Я такую деятельность провожу периодически в своих проектах. Обычно такого не случается, но и на старуху бывает проруха:)

Tails 07.01.2012 02:09

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

booksmaster 07.01.2012 02:20

Ну как-то так... можно и вынести в другой класс, но как-то так, чтоб видимость сохранить и чтоб не пришлось потом ко всем переменным дописывать имя класса вначале... Ну вот а ты сам как делаешь, чтоб не было много кода в основном классе?

Хорошо... Будут ли видны методы основного класса из методов дополнительнго? Если в основном классе есть небольшой метод showMessage, который совсем маленький и выносить его в отдельный класс не смысла, но я этот метод вызываю много где, в том числе в тех функциях, которые я хочу вынести в отдельный класс. Можно ли сделать так, чтоб showMessage вызывался как и раньше без приставок (чтоб код не править в миллионе мест) так буд-то он является методом нашего нового класса?

ProxyGreen 07.01.2012 03:23

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

Что-касается приставок и миллионов правок, то FD есть "фича" что-бы заменять повторяющиеся участки кода на новый код.
Хотя всё это антипаттерн.

wvxvw 07.01.2012 04:18

Я так догадываюсь, вы ищете что-то типа partial из C# - нет, такого нет. Но и писать такие большие классы тоже плохо, и не только потому, что с ними не удобно работать. Плохо еще и потому, что скорее всего такой класс выполняет много функций, которые лучше было бы разделить, с точки зрения планирования проекта в целом.
Самое худшее, что вы можете сделать - есть директива компилятора include она предназначена для того, чтобы во время компиляции собирать код из нескольких файлов. Проблема с ней в том, что ни одна среда разработки не найдет заincludеные исходники - работать так очень неудобно. Лучше, конечно, разбить класс на логические части. Очень часто решением проблемы становятся "состояния" - классы описывающие публичные, и не только методы класса, в зависимости от того, в каком состоянии находится объект - это позволяет сделать код более читаемым. Например, если у вас было:

Код AS3:

class Foo {
private var _flag:Boolean;
public function bar():void {
        if (_flag) { ... }
        else { ... }
}
public function baz():void { bar(); }
}

то это можно переделать в:
Код AS3:

class Foo {
private var _state:IState;
public function baz():void { _state.baz(); }
interface IState {
function baz():void;
}
. . .
class StateA implements IState {
public function baz():void { ... }
}
. . .
class StateB implements IState {
public function baz():void { ... }
}

Таким образом можно избавиться от очень ветвистой логики, повторяющегося кода и т.п.

booksmaster 07.01.2012 05:00

Спасибо, wvxvw
Вот тот ответ, который я искал...

Rzer 07.01.2012 14:40

Наследование? И делить код на функциональные части по их смыслу (взаимодействие с сервером, отрисовка, и т.д.) не подходит?


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

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