4

私のアプリケーションにはRobotLegsとSignalsを使用しています。Robotlegsを使用するのはこれが初めてであり、Joel Hooks SignalCommandMapの例を使用するImはここにあります

イベントとは対照的に、かなり冗長に見えることに気づきました。シグナルごとに新しいクラスを作成する必要がありますが、イベントではイベントタイプを1つのクラスにグループ化します。

私はこれがどれほど視覚的かつ即座に説明的であるかが好きです..シグナルパッケージを閲覧するだけで、すべてのアプリ通信が明らかになります。それは私にはかなり冗長に思えますが。

他の人がこれを使用していますか、私がこのような信号を使用している方法は正しいですか、または人々はこの冗長性を回避する方法を見つけましたか?

乾杯

4

3 に答える 3

1

正しい方法ですが。シグナルの主な利点は、インターフェース定義にシグナルを含めることができることですが、明らかにシグナルの山が大きくなってしまいます。

一般に、ビュー -> メディエーターおよびサービス -> コマンド通信 (1 対 1) にのみシグナルを使用します。システム全体の通知には、イベント (n 対 n) を使用します。これにより、信号の数が少し管理しやすくなります。しかし、それは明らかに好みの問題です。

優れた IDE やテンプレート システムを使用すると、さまざまなシグナルを作成しなければならない「苦痛」の多くが軽減されます。

于 2012-02-10T13:47:50.003 に答える
0

シグナルごとに新しいクラスを作成する必要がありますが、イベントではイベントタイプを1つのクラスにグループ化します。

そうする代わりに、シグナルをプロパティとして使用することができます…次のようなものです。

public var myCustomSignal:Signal = new Signal(String,String);

シグナルは、オブジェクト/インターフェースのプロパティと考えることができます。

Joelの例では、信号を使用してシステムレベルのイベントを示し、信号をタイプ別にマッピングするrobotlegsSignalMapを使用してそれらをマッピングしています。これらはタイプごとにマッピングされるため、システムレベルの信号ごとに一意のタイプを作成する必要があります。

于 2013-03-12T22:25:48.617 に答える
0

コマンド マップ用に新しいシグナル クラスを作成する必要はありません。「dataType」クラスに type プロパティを与えるだけで、それに対して a を実行できますswitch。しかし、それはコマンドにとって厄介です。ただし、コマンドは基本的にアプリケーション全体のアクションをトリガーするためのものです。

すべてのシグナルがアプリケーション全体のアクションをトリガーするわけではありません。

たとえば、単一のView. Signal関連する「ビュー イベント」 (たとえば) のクラスを作成し、タイプ プロパティを与えることMyButtonSignalをお勧めします。MyButtonView

私の典型的な信号は次のようになります。

package {
    public class MyButtonSignal extends Signal {
        public static const CLICK:String = 'myButtonClick';
        public static const OVER:String = 'myButtonOver';

        public function MyButtonSignal() {
             super(String, Object);
        }
    }
}

こんな感じで発送

myButtonSignal.dispatch(MyButtonSignal.CLICK, {name:'exit'});

通常どおり聞く:

myButtonSignal.add(doMyButtonSignal);

シグナルを次のように処理します。

    protected function doMyButtonSignal(type:String, params:Object):void {
        switch(type) {
            case MyButtonSignal.CLICK: trace('click', params.name);         
                break;


            case MyButtonSignal.OVER: trace('OVER', params.name);           
                break;
        }
    }

data変数に独自のデータ クラスを与えると便利な場合があります。

したがって、「ああ、別のイベントに反応する必要がある」と気付くたびに、 に移動してSignal、イベントを表す新しい static const を追加するだけです。Eventオブジェクトを使用するときに行ったのと同じように (おそらく?) 。

于 2012-03-09T04:48:50.183 に答える