JavaScript体系结构-中介,何时使用它们
JavaScript architecture - mediators, when to use them?
这更像是一个关于JavaScript代码结构的一般问题,以及我是否朝着结构良好的代码的正确方向前进。
我得到的当前代码:
(function (myNamespace, $, undefined) {
myNamespace.className = {
init:function { } // do stuff
}
} (window.myNamespace= window.myNamespace|| {}, jQuery)));
(function (myNamespace, $, undefined) {
myNamespace.className2 = {
init:function { } // do stuff
}
} (window.myNamespace= window.myNamespace|| {}, jQuery)));
显然,有了上面的代码,我可以使用相同的Namespace(根据页面/站点部分),并通过myNamespace.className.init()
等调用它们。如果我愿意,我也可以组合这些,但为了可读性,我封装了类。
现在,我一直在读http://addyosmani.com/largescalejavascript/关于调解员的概念。我的第二个问题是我应该在什么时候(如果)使用这些?从className2显然我可以做:
myNamespace.className2 = {
init:function { myNamespace.className.init() } // do stuff
}
那么,为什么它会订阅像mediator.subscribe("classNameInit")
这样的className并在className中发布该事件呢?
我对有关代码结构的建议持高度开放态度,因为这是我在更改JavaScript编写方式时需要纠正的问题。
当你有多个部件将以无限的组合一起工作时,你会使用它,因为你不提前知道所有的组合,或者假设所有的组合更有效。
假设您正在构建一个社交媒体应用程序,并编写了一个类来封装用户列表。在一些屏幕上,点击列表中的用户会打开他们的个人资料,在另一个屏幕上,也许点击用户会搜索他们留下的每一条评论,而在第三个屏幕上会发生其他事情。
如果您使用mediator/pubsub而不是编写这个,那么您最终会在onclick事件中得到一堆If语句。。。
UserList.prototype.onUserClick = function(user) {
// Check if we're supposed to open a popup
if (this.mode === 'profile')
// Check for something else
else if (this.mode === 'something else')
// Check for another case
else if (this.mode === 'foo')
}
Mediator是这个问题的解决方案,因为它不需要UserList了解它可能出现的每一种情况。相反,UserList中的上述代码可以简单地进行精炼,以便在用户点击时广播…
UserList.prototype.onUserClick = function(user) {
this.publish('user-click', user);
}
然后,你的每个其他屏幕或UI片段都可以简单地监听用户点击消息。。。
// On pages where there needs to be a popup profile
Mediator.onMessage('user-click', function(data) {
showProfilePopup(data);
});
// Or perhaps on a search page
SearchBox.onMessage('user-click', function(data) {
this.searchByUser(data);
});
此外,中介器开始发光的地方是因为这些其他UI组件,如SearchBox
,对UserList
激发用户点击不感兴趣,他们只对发布用户点击感兴趣,页面上的其他UI控件也可以激发用户点击,并且这些部分可以对此做出反应。
附带说明一下,className = { }
并没有创建一个类。你可能想要的是className = function() { }
。
- 与您的操作系统或体系结构不兼容:fsevents@1.0.11.
- 在Flux体系结构中,如何管理存储相同类型数据的存储
- 具有http服务器、websocket和express的体系结构
- 改进插件体系结构的实现
- Chrome 扩展消息传递体系结构
- Web应用程序的体系结构/设计,对另一台服务器进行了大量Ajax调用
- RESTful Web 应用程序中的客户端服务器体系结构
- 基于 AJAX 的聊天的数据库体系结构
- Socket.io 向某些套接字(体系结构)发出消息
- 用于第三方 API 调用的 Web 应用体系结构
- MEAN 堆栈上登录系统的体系结构
- 网络表单和脚本服务体系结构
- 网站中的单页体系结构或应用程序在 html 导航中使用 servlet 而不打开新页面
- 需要经过身份验证的 WCF REST 体系结构建议
- 需要哪种体系结构才能允许多个 Web 应用协同工作,这些应用可以单独更新
- Angularjs中ajax的单一方法体系结构
- ReactJs组件体系结构
- 在Flux体系结构中,全局调度程序是否有害
- JavaScript体系结构-中介,何时使用它们
- 原型对象的正确体系结构