保持Angular模块完全分离

时间:2014-02-23 20:43:47

标签: angularjs module

我正在尝试设置一个大型角度网络应用,其架构如here所述

我无法理解的是如何使模块完全独立于其他模块。所有专注于模块的github样板或示例项目似乎都具有很大程度上依赖于通用模块或功能/服务的模块。这有点违背保持一切分开的目的不是吗?

采用以下两个例子:

  • 我有一个处理一些基本功能(哈希等)的实用程序模块,以及另一个处理与API通信的模块。想象一下需要进行哈希并与API通信的用户模块,我该如何处理?直接将Util和API模块作为依赖项注入会破坏可靠性,并将它们放入User模块也意味着需要很多双重代码(想象使用Util和API模块的多个模块)。或者我应该使用调解员来调解沟通?

  • 存储在用户模块中的用户信息几乎应该在应用程序范围内使用,例如在外观中(外观应根据文章处理安全性)。如何在不依赖所有内容的情况下允许所有应用程序访问信息?

提前致谢:)

1 个答案:

答案 0 :(得分:2)

我回答了类似的问题here。 您将行为分离到模块中是正确的。

我们的想法是将依赖注入作为一种将这些行为收集到卷起模块中的方法。使用IoC容器,您可以在命名和其他约定中遵守规则,通过可配置组件使您的应用程序松散耦合。

我们有一个通用app类型模块,只需注册相应的功能模块。这又由boot模块引导,该模块只是在某处调用angular.bootstrap(['app'])(我们在页面中)。

我们可以使用此设置轻松装饰或替换现有服务/控制器/任何内容,团队可以独立工作,而功能可以按不同速率扩展。

例如:

var myWidget = angular.module('myWidget',[])
myWidget.directive('myWidget',function(){...})
myWidget.factory('somethingImportant',function(){...})

var myDomainModel = angular.module('myDomain',[])
myDomainModel.factory('someModel',function(){...})
... //more models

var app = angular.module('app',['myWidget','myDomain'])
app.factory('applicationWidePolicyHere',function(){...})

//on index.html; das boot.
(function(){ angular.bootstrap(document,['app']) })()