Организация длинных сценариев в отдельных файлах?

StackOverflow https://stackoverflow.com/questions/3878022

Вопрос

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

Я пытаюсь вырезать и вставить код из моего класса контроллера в новый класс / файл, позволяющий классу контроллера вызывать новый класс и позволить новым классам иметь доступ к свойствам класса контроллера и функции.

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

package
{   
import flash.display.Sprite;
import flash.events.Event;

public class Test extends Sprite
    {
    public var myString:String;

    public function Test()
        {
        if  (stage)
            init(null);
            else
            addEventListener(Event.ADDED_TO_STAGE, init);
        }

    private function init(evt:Event):void
        {
        if  (hasEventListener(Event.ADDED_TO_STAGE))
            removeEventListener(Event.ADDED_TO_STAGE, init);

/////////////// MOVE COMMENTED CODE TO NEW FILE ///////////////////////
//      
//      //Assign The String A Value
//      myString = "Hello world";
//      
//      //Draw A Blue Square
//      var sq:Sprite = new Sprite();
//      sq.graphics.beginFill(0x0000FF);
//      sq.graphics.drawRect(10, 10, 100, 100);
//      sq.graphics.endFill();
//      super.addChild(sq);
//      
//      //Call Tracer Function
//      tracer();
//
//////////////////////////////////////////////////////////////////////

        //Call pasted method in NewFile.as
        NewFile.myNewFunction();     // <- this doesn't work
        }

    public function tracer():void
        {
        trace(myString);
        }
    }
}

Новый файл не имеет доступа к классу контроллера - не работает. Как я могу написать новый файл, чтобы у него есть доступ к свойствам, функциям, сцену и т. Д. Класс контроллера, как если бы его код никогда не был удален и все еще находится в своем первоначальном месте.

package
{   
public class NewFile
    {
    public static function myNewFuntion():void
        {
        //Assign The String A Value
        myString = "Hello world";

        //Draw A Blue Square
        var sq:Sprite = new Sprite();
        sq.graphics.beginFill(0x0000FF);
        sq.graphics.drawRect(10, 10, 100, 100);
        sq.graphics.endFill();
        super.addChild(sq);

        //Call Tracer Function
        tracer();
        }
    }
}
Это было полезно?

Решение

Открытый класс Mainclass Extenss Sprite {Private Var Subclass: подкласс; Публичная функция Mainclass {VAR контроллер: контроллер = новый контроллер (); подкласс = новый подкласс (контроллер); AddChild (подкласс); } Частная функция init (): void {subclass.dowhatever (); }} Public Class Controller {Public Function Dottis (): void {} Публичная функция dothat (): void {трассировка ("контроллер делает это ..."); } Общественная функция DOSOMOTLETHELDELSE (): void {}} Публичное классно продлевает Sprite Sprite {Private VAR контроллер: контроллер; Общественный функциональный подкласс (контроллер: контроллер) {its.controller = контроллер; трассировка («новый экземпляр подкласса!»); } Общественная функция Dowhatever (): void {контроллер.dothat (); }}

Другие советы

Этот код

//Call Tracer Function 
tracer(); 

не собирается работать, так как Tracer не является статическим методом.

Этот :

super.addChild(sq);

не будет работать, так как NewFile не наследует любой класс; super() Призывает метод гомоним мать-класса в отношении наследства. То, что вы должны делать, есть вероятно, что состав или соотношение агрегации: NewFile не является контроллером, а контроллер имеет NewFile.

Трудно точно знать, что не так, если вы не даете нам сообщение об ошибке.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top