在
Nicholas Zakas和
Addy Osmani的这些会谈中,他们讨论了在构建大规模Javascript应用程序时使用Facade模式作为沙箱的想法,以便将应用程序与底层基础库分离.
理论上,这种解耦可以让您在不需要重写应用程序模块的情况下切换出基础库.然而,在实践中,这似乎更难以实施.
这个提议的体系结构有具体的实现,例如AuraJS.但是从查看源代码看,沙箱通过从其某些方法返回jQuery对象仍然具有泄漏的抽象.
我并不特别关注AuraJS,但更多的是尝试抽象像jQuery这样的库而不会失去太多功能的一般概念.
举个例子,假设我的facade / sandBox有一个dom方法.find(selector).我可以想到它可能会返回的3个选项:
>一个jQuery对象 – 这会将jQuery泄漏到消费模块中.
>一个原始的dom元素 – 功能丧失,没有人真的想用这个!没有链接.
>一个类似自定义jQuery的包装器 – 可能非常复杂,但似乎是理想的解决方案.
所以我的问题是,如何在不丢失太多功能的情况下抽象像jQuery这样的库,这样可以在未来的某些时候以最小的努力替换它?
解决方法
我认为你要求编写更多的模块化代码,但jquery并不是一个很好的例子.