1

サーバーとやり取りする Air アプリケーションを開発しています。さまざまな主題に関連するさまざまな方法がたくさんあります。

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

マスター 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
    }
}

これは API の構造化された実装への正しいアプローチですか、それとも間違った方向に進んでいますか?

私が立ち往生している問題は、Api.Subject1そうでないstatic場合、循環自己参照によってスタックオーバーフローが発生することです。その基本クラスがSubject1プロパティとして持っているためです。

Api.Subject1 がstaticの場合、エラー 1119 が発生します。

4

2 に答える 2

2

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

代わりに、特定のそれぞれが拡張する基本Subjectクラスを用意してSubjects、それらがすべて共通のメソッドを使用できるようにし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; }
}
于 2012-05-10T12:24:40.620 に答える
0

あなたは静的にSubject1なりたいですか?Subject2もしそうなら、myMasterApi.Subject1それらの静的アイテムに到達する方法です。

代わりに、おそらく定義から static を削除したいと思うでしょう。すべてがうまくいくはずです。

于 2012-05-10T11:01:21.133 に答える