将依赖注入限制为模块内依赖项

时间:2016-04-12 12:41:37

标签: javascript angularjs dependency-injection module modular-design

TL; DR:

有没有办法将Angular JS依赖项注入限制/ lint到只存在于模块中的组件?

我继承了一个Angular JS代码库,显然是spaghetti code。 另外,即使应用程序很庞大,大多数应用程序功能也会在三个或四个模块之间共享。

由于Angular不限制模块级别的命名空间,因此团队实际上忽略了模块边界。这本身不是问题(Angular允许它)。问题是应用程序只有基本结构,组件很少可重用,难以扩展,我甚至不会考虑替换模块。

现在,客户要求我们将应用程序扩展到一些模块应该易于替换的地步,我需要开发一个解决方案。

我想知道策略,我想通过引入基本上实现facade patterninterface pattern的模块到模块接口来重构应用程序。

换句话说,我想要从外部世界隐藏模块实现的服务,以便模块不知道数据的来源和来源。同时我想使用接口模式来确保传递给模块的数据满足某些期望。

我想让过渡过程更容易,并确保每个人都遵守规则。 Angular无法强制执行依赖注入的任何规则,angular plugin for eslint不会包含任何内容。有没人试过这个?我用谷歌搜索但没有找到任何东西。

1 个答案:

答案 0 :(得分:0)

一个开始的地方(我不说这是一个好地方)是在运行时查看模块中的_invokeQueue。你可以通过angular.module('myModuleName')._invokeQueue

看到它

此数组包含模块自身定义的所有内容。您可以尝试将其与$injector.annotate()(请参阅https://docs.angularjs.org/api/auto/service/ $ injector#annotate)一起集成到单元测试中,以检查是否在所需模块中定义了所需的依赖项。

我希望你能理解这一点吗?