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