Backbone.js 带有子应用程序/模块的应用程序应该有一个中央审批员,还是每个模块管理自己的审批员?

Backbone.js 带有子应用程序/模块的应用程序应该有一个中央审批员,还是每个模块管理自己的审批员?,backbone.js,marionette,backbone-routing,Backbone.js,Marionette,Backbone Routing,我有一个由几个模块组成的应用程序,例如:联系人、会议、提醒 URL可能是 1. /#contacts -> contacts module, listing page 2. /#contacts/45 -> contacts module, detail page of contact id 45 3. /#meeting -> meetings module, listing page 4. /#meeting/67

我有一个由几个模块组成的应用程序,例如:联系人、会议、提醒

URL可能是

1. /#contacts       ->    contacts module, listing page
2. /#contacts/45    ->    contacts module, detail page of contact id 45

3. /#meeting        ->    meetings module, listing page
4. /#meeting/67     ->    meetings module, detail page of meeting id 67
我使用木偶应用程序模块'ContactMgr',应用程序模块'MeetingMgr'来分离模块

问题:哪一种是最佳实践? 每个模块中都有一个独立的路由器 B应用程序中的一个路由器
对我来说,多路由器解决方案更好,因为每个路由器只对它的模块有意义。每个路由器应使用自己的控制器,控制器应使用其模块中的视图/集合/模型

实际上,该模块的主要思想是,您可以添加或删除它们,只需在应用程序的其他部分做一些小的更改。所以,若你们使用多路由器解决方案,若你们想在你们的应用程序中添加/删除模块,你们只需要在你们的应用程序中添加/删除它的实例化,路由器控制器就会在你们的模块中

但是,如果您使用单路由器解决方案,您还必须编辑您的路由器、控制器等


因此,多路由器方法更加模块化。

多路由器解决方案的一个问题是:当用户看到会议模块时,联系人模块可能需要停止,以节省内存。停止接触模块后,我想现在没有办法去接触模块了?因为没有路由器会查看“联系人”路由。我认为内存使用不会有差异。木偶模块通常由路由器/控制器/视图/模型组成。视图和模型仅在需要时创建,因此当您在“会议”模块中时,将不会实例化“联系人”模块的视图/模型。唯一总是存在的东西是路由器和控制器。它们通常在应用程序初始化时创建,并在应用程序生命周期内存在。因此,如果所有模块都已加载,则只实例化路由器和控制器,一个大型路由器/控制器与许多小型路由器/控制器之间没有显著差异。如果模块中有一些复杂的逻辑,占用大量内存,有许多事件处理程序,等,然后可能停止和重新启动模块的意义和单一的路由器将更好地工作。但如果您有接近默认CRUD的东西,那么停止模块很可能不会给您带来太多性能
 // in file js/app/ContactMgr/Router.js
 App.ContactMgr.Router = Marionette.AppRouter.extend({
    appRoutes: {
     'contacts':     'listContacts',
     'contacts/:id': 'showContact'
    }
 });

 //////////////////////////////////////////////

 // in file js/app/MeetingMgr/Router.js
 App.MeetingMgr.Router = Marionette.AppRouter.extend({
    appRoutes: {
     'meetings':     'listMeetings',
     'meetings/:id': 'showMeeting'
    }
 });
 // in file js/app/app.js
 App.Router = Marionette.AppRouter.extend({
    appRoutes: {
     'contacts':     'listContacts',
     'contacts/:id': 'showContact',
     'meetings':     'listMeetings',
     'meetings/:id': 'showMeeting'
    }
 });