2014-11-19 3 views
0

REFERENCEПочему шаблон фасада + показывает модульный шаблон «добавить безопасность»?

По ссылке: Ниже более продвинутая версия шаблона фасада, что повышает уровень защиты внутренних методов.

Вопрос: Честно говоря, что они означают добавить безопасность? Кроме того, что было бы небезопасным примером? Наконец, что было бы простым, но реальным прецедентом для безопасности и этот фасад + раскрытие шаблона модуля?

var MyModule = (function(window, undefined) { 

    // revealing module pattern ftw 
    function MyModule() { 

    function someMethod() { 
     alert('some method'); 
    } 

    function someOtherMethod() { 
     alert('some other method'); 
    } 

    // expose publicly available methods 
    return { 

     // in our normal revealing module pattern, we'd do the following: 
     someMethod : someMethod, 

     // in the facade pattern, we mask the internals so no one has direct access by doing this: 
     // HOW DOES THIS MASK THE INTERNALS? WHAT DO THEY MEAN BY ADDS SECURITY? 
     someMethod : function() { 
     someMethod(); 
     } 

    }; 

    } 

}) (окно);

+3

Это означает, что никто не может изменить подпись функции. но он все равно может быть полностью заменен, что делает всю идею несколько глупым. если он имеет доступ к закрытию, то это имеет смысл. – dandavis

+0

Подождите, так что для раскрывающего шаблона модуля вы можете переназначить someMethod: но используя шаблон фасада, вы не можете переназначить someMethod? –

+0

не могли бы вы показать практический пример? Я просто немного смущен. –

ответ

1

Это не имеет никакого смысла. На самом деле ничего.

  • Нет дополнительной безопасности. Безопасность - это совершенно другое поле при разработке веб-приложений.
  • «Хорошо работает в сочетании с другими узорами», «Простой в использовании» на самом деле не является преимуществом. Обычный дизайн еще проще.
  • «Упрощает исправление внутренних компонентов». Конечно. Но YAGNI. Вы все еще можете представить его, когда вы действительно исправляете внутренние элементы или внешние элементы.
  • «Обеспечивает более простой публичный интерфейс». Ну, это может использовать, чтобы уменьшить сложность интерфейса, особенно если внутренние методы имеют дополнительные параметры, которые не документированы и, как ожидается, не будут отображаться. Но someMethod в примере не имеет никаких параметров, поэтому здесь просто бесполезно.

На самом деле, модель показательного модуля уже является фасадом сама по себе. Он определяет некоторые внутренние функции, а затем экспортирует их на объект модуля, именами свойств которого являются внешний интерфейс. Нет необходимости в дополнительном слое косвенности.

+1

решение для поиска проблемы. 1-й пример в «книге» имеет смысл, один выше, не так много ... – dandavis

+0

Справедливо. У вас есть простые, но сформулированные примеры этого шаблона? @dandavis, вы сказали, что первый пример имеет смысл? поэтому шаблон фасада просто обертывает функцию вокруг некоторых условностей (сложность)? Если это так, я могу просто двигаться дальше ... Я понимаю. –

+0

addEvent проще и безопаснее использовать, чем кодирование addEventListener и attachEvent подпрограмм каждый раз.вы также можете думать о полиполках как о фасаде в этом отношении. – dandavis

Смежные вопросы