Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么立面模式+;“显示模块化模式”;添加安全性“;?_Javascript_Design Patterns_Facade - Fatal编程技术网

Javascript 为什么立面模式+;“显示模块化模式”;添加安全性“;?

Javascript 为什么立面模式+;“显示模块化模式”;添加安全性“;?,javascript,design-patterns,facade,Javascript,Design Patterns,Facade,根据参考资料:下面是facade模式的更高级版本,它为内部方法增加了安全性 问题: 老实说,增加安全性意味着什么?此外,什么是不安全的例子?最后,对于安全性和这个facade+显示模块模式,一个简单但真实的用例是什么 var MyModule = ( function( window, undefined ) { // revealing module pattern ftw function MyModule() { function someMethod() {

根据参考资料:下面是facade模式的更高级版本,它为内部方法增加了安全性

问题: 老实说,增加安全性意味着什么?此外,什么是不安全的例子?最后,对于安全性和这个facade+显示模块模式,一个简单但真实的用例是什么

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();
      }

    };

  }

})(窗口)

这毫无意义。真的没有

  • 没有增加“安全性”。在开发web应用程序时,安全性是一个完全不同的领域
  • “与其他模式结合使用效果良好”,“易于实现”并不是真正的优势。正常的设计更简单
  • “便于修补内部构件”。当然但是当您真正修补内部或填充外部时,仍然可以引入它
  • “提供更简单的公共界面”。嗯,它可以用来降低接口的复杂度,特别是如果内部方法具有未记录且预期不会公开的附加参数。但是示例中的
    someMethod
    没有任何参数,因此在这里没有任何用处

实际上,显示模块模式本身已经是一个外观。它定义一些内部函数,然后在模块对象上导出它们,模块对象的属性名是外部接口。不需要额外的间接层。

这意味着没有人可以更改函数签名。但是,它仍然可以被完全替换,这使得整个想法有点愚蠢。如果它可以访问闭包,那么它就更有意义了。等待显示的模块模式,您可以重新分配someMethod:但是使用facade模式,您不能重新分配someMethod?您可以展示一个实际的示例吗?我只是有点困惑。在这两种情况下,你都可以重新分配它。这有点没用,但我想在第二个例子中,你不能实用地获得方法的源代码。尽管如此,这并不是我所说的安全。问题是:什么样的安全?可靠性?安全?保护?可编程性?还是用户保护?寻找问题的解决方案。“书”中的第一个例子是有道理的,上面的一个,不太……足够公平。你有这种模式的简单而清晰的例子吗@丹达维:你说第一个例子有意义吗?那么facade模式只是围绕一个函数包装一些条件(复杂性)?如果是这样的话,我可以继续。。。我明白了。addEvent比每次编写addEventListener和attachEvent例程更容易、更安全。在这方面,你也可以把多边形填充看作是一种门面。@MatthewHarwood:它不是在函数中包装复杂的行为。它首先要使用一个额外的名称(
addEvent
)而不是内部方法(
addEventListener
),即使它们做的事情是一样的(
addEvent
可以是一个只调用
addEventListener
的函数,但也可以是-或者在模块模式中,声明
someMethod:someInternalMethod
)。关键是您可以轻松地更改实现,而不需要名称。