0

下部にあるJavascriptコードの抜粋を検討してください。大まかに言って、2つのモジュールで構成されています。1つはメッセージを処理するためのものです。メッセージモジュール内のfiltersUpdateSuccessメソッドの利点は何ですか?

現在、tplPanelsモジュールのoverwriteAllメソッドに委任するだけです。私が思いついたアイデアの1つは、filtersUpdateSuccessメソッド内で、tplPanels.overwriteAllの呼び出しをtry/catchでラップできるということです。これは私に利益をもたらすでしょうか、そして間接化の追加レベルに他の利益はありますか?

PS ....私は次の質問に精通しており、それを調べてその中のリンクをたどりましたが、より一般的なものではなく、特定のコンテキストでの回答が必要です。間接参照のレベルはすべての問題を解決します

function msgHandlers() {
    var scope
        ,msgs;

    return {
        SET_CONTEXT: function(context) {
            scope = context.scope;
            msgs = context.messages;
        }

        ,SUBSCRIBE_ALL: function() {
            me.subscribe(scope, msgs.FILTERS_UPDATE_SUCCESS, this.filtersUpdateSuccess);
            //me.subscribe(scope, msgs.FILTERS_UPDATE_SUCCESS, tpl.overwriteAll);
        }

        ,filtersUpdateSuccess: function(filterValues) {
            tplPanels().overwriteAll(filterValues);
        }
    }
}

function tplPanels() {
    var instances = {};

    return {
        locationInstance: function() {
            if (!instances.locationPanel) {
                instances.locationPanel = locationPanel();
            }
            return instances.locationPanel;
        }
        //more instances, etcetera
        ,overwriteAll: function(filterValues) {
            //do something useful
        }
    }
        //etcetera
4

1 に答える 1

1

ここでのケースは、参照間接参照の余分なレイヤーではなく、インターフェースの抽象化の1つであるように思われます。

インターフェイスの抽象化にはいくつかの目的があります。

  1. 1つの汎用クライアントまたは形状が制御できない1つのクライアントが必要とするインターフェースにコードを適合させるため。
  2. 複数のクライアントが共有するインターフェースにコードを適合させるため。
  3. 実装の詳細を抽象化することにより、コードの一部をメンタルモデルに適合させるため。
  4. 計画された(可能性だけでなく)将来のユースケースで必要とされるインターフェースにコードを適合させるため。

システム内の別のモジュールが、context-setting-subscribing-filteringインターフェースですでに異なる入力を受け取っている場合は、コードをそこにプラグインできるため、上記の(1)または(2)が役立つ可能性があります。

このインターフェイスの複数のプロバイダーまたはコンシューマーを作成する計画がある場合は、コードをメモリにページングする作業を既に行っているので、インターフェイスに準拠させるだけでよい場合があります。(4)上記。

他のモジュールがすでにこのように構成されている場合、またはフィルタリングが他のモジュールが使用する一般的な操作である場合、コードメンテナはそれを利用してコードをすばやく学習できます:(3)上記。

これらのいずれにも当てはまらない場合は、filtersUpdateSuccess当てはまらないものはすべて閉じないtplPanelsため、インターフェイスの抽象化には価値がありません。

于 2011-11-23T15:40:47.140 に答える