2012-05-10 9 views
1

私のサーバーと対話するAirアプリケーションを開発しています。さまざまなテーマに関連したさまざまな方法がたくさんあります。AS3:私のAPIの実装のためのクラスを整理する方法?

これを構造化するために、私はマスター 'API'オブジェクトとそのいくつかのエクステンダを導入し、それぞれが特定のSubjectのメソッドを実装します。それぞれは、実際にサーバーを呼び出すマスターAPI _callメソッドを使用します。

私はそうのようにその子を参照することができるように私は、マスターAPIを設定するにはどうすればよい

var Api:myMasterApi = Application.getApi(); 

// Now do the API calls: 
Api.Subject1.Method1(); 
Api.Subject2.Method3(); 

を私はおそらく間違った方法では、インスタンス化のサブクラスにMasterApiパブリック静的プロパティを設定しようと試み:

class myMasterApi { 
    public static Subject1:mySubject1 = new mySubject1(); 
    public static Subject2:mySubject2 = new mySubject2(); 

    protected function _call(args...) { /* does the call */ } 
} 
および増量はとても似ています:

class mySubject1 extends myMasterApi { 
    public function Method1(args...) { 
     prepare things; 
     this._call(args); // do the call 
    } 
} 

このRIGHですAPIの構造化された実装へのアプローチ、または私は間違ったトラックにいますか?

私が悩んでいる問題は、Api.Subject1staticではない場合、循環自己参照によってスタックオーバーフローを作成します。その基本クラスはプロパティとしてSubject1です。 Api.Subject1がstaticあるとき、それはエラー1119を与える

:「静的な型と参照による可能性が未定義のプロパティポストのアクセスを...」

答えて

2

2つの異なる基本的なOOPの概念(構成と継承)が混在しています。特定のSubjectクラスがMasterApi(継承)を拡張し、MasterApiにそれぞれの子孫のインスタンスが含まれるようにすることは、おそらく意味がありません。 は、円形です。あなたが代わりにやりたいことは何

は、彼らはすべてのいくつかの一般的な方法を使用できるように、特定のSubjectsのそれぞれが延びていることを基本Subjectクラスを持って、そしてあなたのMasterApiはのシングルトンインスタンスを含む無関係なクラスで持っていますそれぞれの具体的なSubjects

「シングルトン」は単に「インスタンス(静的クラスではない)ですが、そのうちの1つだけです」という意味です。これはあなたのstaticプロパティを宣言し、特定のSubjectクラスの新しいインスタンスに設定することによって得られるものです。

ベアボーンの例(imports文などを除く)。私はあなたの「被験者が」私はちょうどいくつかの作ら性質を提示しているか見当がつかない:

class SubjectBase { 
    private var _name:String; 
    private var _description:String; 

    public function SubjectBase() { } 

    protected function loadSubject(subjectID:String):void { 
     var qResult:Object = SomeClass.SomeMethodThatQueriesYourServer(subjectID); 
     _name = qResult["SUBJECT_NAME"]; 
     _description = qResult["SUBJECT_DESC"]; 
    } 

    public function get name():String { 
     return _name; 
    } 

    public function get description():String { 
     return _description; 
    } 
} 

class Subject1 extends SubjectBase { 
    public function Subject1() { 
     super(); 
     loadSubject("SUBJECT1"); 
    } 
} 

class Subject2 extends SubjectBase { 
    public function Subject2() { 
     super(); 
     loadSubject("SUBJECT2"); 
    } 
} 

class MasterApi { 
    private static _subject1:Subject1 = new Subject1(); 
    private static _subject2:Subject2 = new Subject2(); 
    public function MasterApi() { } 
    public static function get subject1():Subject1 { return _subject1; } 
    public static function get subject2():Subject2 { return _subject2; } 
} 
Subject1が静的でない場合は、myMasterApiの初期化は循環参照によってスタックオーバーフローするには、以下
0

あなたはSubject1Subject2が静的​​になりたいですか?その場合は、myMasterApi.Subject1は静的なアイテムにどのように到達するかです。

代わりに、定義から静的なものを削除したい場合は、すべてがうまくいくはずです。

+0

は:子サブクラスがプロパティを継承Subject1し、自身の別のコピーを作成します。 – Serge

関連する問題