Любые конкретные преимущества дополнительного уровня косвенности - PullRequest
0 голосов
/ 23 ноября 2011

Пожалуйста, обратите внимание на выдержку из кода Javascript внизу.Примерно он состоит из двух модулей, один для обработки сообщений.В чем преимущество метода filtersUpdateSuccess в модуле сообщений?

В настоящее время он просто делегирует методу overwriteAll модуля tplPanels.Одна идея, которая меня поразила, заключается в том, что в методе filtersUpdateSuccess вызов tplPanels.overwriteAll может быть заключен в попытку / перехват.Может ли это принести мне пользу, и есть ли какие-либо другие преимущества для дополнительного уровня косвенности?

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

1 Ответ

1 голос
/ 23 ноября 2011

В данном случае речь идет об абстракции интерфейса, а не о дополнительных уровнях ссылочной косвенности.

Интерфейсная абстракция служит нескольким целям:

  1. Чтобы фрагмент кода соответствовал интерфейсу, необходимому одному универсальному клиенту или одному клиенту, чья форма находится вне вашего контроля.
  2. Чтобы фрагмент кода соответствовал интерфейсу, совместно используемому несколькими клиентами.
  3. Чтобы заставить фрагмент кода соответствовать ментальной модели сопровождающего, абстрагируя детали реализации.
  4. Чтобы фрагмент кода соответствовал интерфейсу, необходимому для запланированного (а не просто возможного) будущего варианта использования.

Если другой модуль в вашей системе уже принимает другие входные данные с помощью интерфейса настройки контекста-подписки-фильтрации, он может быть полезен, поскольку позволяет вашему коду подключаться там: (1) или (2) выше.

Если у вас есть конкретные планы иметь несколько провайдеров или потребителей этого интерфейса, то может быть полезно просто привести его в соответствие с интерфейсом сейчас, поскольку вы уже выполнили работу по переносу кода в память: (4) выше.

Если другие модули уже структурированы таким образом, или если фильтрация является распространенной операцией, используемой другими модулями, разработчики кода могут использовать это для быстрого изучения вашего кода: (3) выше.

Если ни один из них не применим, то, поскольку filtersUpdateSuccess не закрывается ни по чему, что не tplPanels, в абстракции интерфейса нет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...