Организация длинных сценариев в отдельных файлах? - PullRequest
0 голосов
/ 07 октября 2010

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

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

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

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);
        }
    }
}

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

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();
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 07 октября 2010
public class MainClass extends Sprite
{
    private var subClass:SubClass;

    public function MainClass
    {
       var controller:Controller = new Controller();

       subClass = new SubClass(controller);
       addChild( subClass );
    }

    private function init():void
    {
       subClass.doWhatever();
    }
}

public class Controller
{

    public function doThis():void
    {
     }
    public function doThat():void
    {
         trace("controller do that...");
     }
    public function doSomethingElse():void
    {
     }
}

public class Subclass extends Sprite
{
     private var controller:Controller;

     public function Subclass(controller:Controller)
     {
         this.controller = controller;
         trace( "new Subclass instance!" );
     }

     public function doWhatever():void
     {
         controller.doThat();
     }
}
2 голосов
/ 07 октября 2010

Этот код

//Call Tracer Function 
tracer(); 

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

Вот этот:

super.addChild(sq);

также не будет работать, поскольку NewFile не наследует ни один класс; super() вызывает метод омонима родительского класса в отношении INHERITANCE. То, что вы должны сделать, - это, скорее всего, отношение СОСТАВ или СОСТАВЛЕНИЕ: newFile НЕ является контроллером, но контроллер имеет новый файл.

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

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

...