1

クライアントのフレームワークに読み込まれるフラッシュ キャンペーンを作成していますが、これを制御することはできません。フレームワークは、ロケール、フォント、コピーなどのいくつかのものを既にロードしており、初期化時にこれらのものを私の swf に渡します。

SWF (シェルと呼びましょう) のサイズが制限されているため、キャンペーン固有のプリローダーが表示され、サイトの残りの部分と共に別の SWF (これをキャンペーンと呼びましょう) が読み込まれます。

シェルとキャンペーンはどちらも PureMVC モジュールになります。シェルはいくつかのプロキシを作成し、キャンペーンにロードする前に、フレームワークから渡されたデータ (ロケール定数、フォントなど) をこれらに取り込みます。

キャンペーンが読み込まれると、ロケールやフォントなどが必要になるので、私の質問は、このデータをシェル モジュールからキャンペーン モジュールに渡す最良の方法は何ですか?

  • キャンペーン モジュールで同じプロキシを作成し、キャッシュされるデータを再度読み込むこともできますが、これは明らかに間違った方法のように感じます。

  • 私は pipes ユーティリティの使用を調査しましたが、通信は一方向であり、キャンペーンの初期化中に一度だけ発生するため、これは私の場合は少しやり過ぎのようです.

  • プロキシをキャンペーン モジュールの init メソッドに渡し、これらのプロキシをキャンペーン モジュールの起動コマンドに登録することは、設計パターンの観点からは "OK" でしょうか? これらのプロキシは、通知名を通じてシェル アプリケーション ファサードへの参照を持っているため、これは間違っているようです。通知名を、両方のモジュールが使用できる「NotificationConstants」クラスに移動してもよろしいですか?

  • キャンペーン モジュールで同様のプロキシを作成することもできますが、今回は、前述の init メソッドに渡された古いプロキシからのデータ オブジェクトを使用して作成しますか? データ オブジェクトは私のシェル モジュールへの参照を持っていませんが、「古い」プロキシは参照しているので、自然にこれが最善の方法のように感じます..

4

1 に答える 1

2

私が通常使用する解決策は、インターフェイスを作成することです。

interface Campaign {
    function set campaignDetails(value:CampaignDetails):void;

    //...
}

キャンペーン モジュールはこのインターフェイスを実装する必要があります。実装では、通知と参照が重複しないように、モジュールで別のプロキシを使用することをお勧めします。

シェルがモジュールをロードする準備ができたら、次のことを行う必要があります。

if (module is Campaign)
{
    (module as Campaign).campaignDetails = ...;
}

私はあなたに何も新しいことを言っていないと確信しています。シェルとモジュールの間の知識をインターフェースレベルでのみ維持するようにする必要があるだけです。次に、データを渡し、モジュール MVC コアを残して、シェルから独立して処理します。

于 2011-10-24T10:24:04.553 に答える