我现在已经使用角度一段时间了,而且我没有看到它是如何从我之前的编码方式中得到改进的。
首先,我看不出有一个中心对象来保存你的项目有什么问题,毕竟,注入器是一个单一的,它将你的依赖关系查找到一个中心位置,所以angular确实有一个中心对象,它只是隐。如果正确完成,Namspacing并不意味着耦合。即使完成后,您也不需要将代码中的每个对象与其他对象松散耦合。此外,无论何时创建独立的JS脚本,都必须将其包装成角度,以便让它们一起玩得很好。
其次,每次声明所有依赖性(特别是缩小)是非常冗长的,所以从可读性的角度来看,与正确的命名空间相比,没有任何好处。
第三,性能提升很小。它迫使我到处使用单身,但如果我需要的话,我可以自己做,而且大多数时候,我不这样做(网络和DOM操作是我的瓶颈,而不是JS对象)。
最后,我喜欢“增强型”HTML和自动双向绑定,但我看不出注入如何使其比其他框架处理依赖性的方式更好,因为它甚至没有提供像require.js这样的动态加载。我没有看到任何用例,我对自己说“哦,这是比以前更好的地方,我看到”编码时。
您能否向我解释一下这项技术选择给项目带来了哪些好处?
我现在只能看到一个:常规和最佳实践执行。创建一个lib生态系统是一个很大的问题,但是现在我还没有看到它在角度社区中的成果。
答案 0 :(得分:6)
对我来说,Angular的依赖注入如何改善我的项目几乎没有方面,我将在此列出。我希望这将向您展示其他人如何从中受益,但如果您是一个组织良好且经验丰富的JS开发人员,那么对您来说可能不是同样的情况。我认为在某种程度上,这只是开发自己的工具和编码指南的问题。
JS是动态语言(这是新的,对吧?),它为程序员提供了很多权力,甚至更多的责任。组件可以通过各种方式相互交互,传递各种对象:常规对象,单例,函数等。它们甚至可以使用甚至没有提到的代码块供其他组件使用。
JS从来没有(并且很可能永远不会)以统一的方式声明公共,私有或包(模块)范围,就像其他语言一样(Java,C,C#)。当然有一些封装逻辑的方法,但是要求任何新手使用该语言,他根本就不知道如何使用它。
我喜欢DI(不仅在Angular中,而且在一般情况下)是您可以列出组件的依赖关系,并且您不必担心如何构建此依赖关系。这对我来说非常重要,特别是Angular中的DI允许你解决这两种组件:来自框架本身(如$http
)或自定义组件(如我最喜欢的eventBus
我是用于包装$on
事件处理程序)。
我经常看一下服务的声明,我只是通过查看依赖项来了解它的作用以及它是如何做到的!
如果我要构建和/或使用组件本身深处的所有对象,那么我将始终必须彻底分析实现并从各个方面进行检查。如果我在依赖列表中看到localStorage
,我知道我正在使用HTML5本地存储来保存一些数据。我不必在代码中查找它。
我们不再需要打扰某些组件的初始化顺序。如果A
取决于B
,那么当B
需要时,DI会确保A
已准备就绪。
使用DI时,模拟组件会有很大帮助。例如,如果您有控制器:function Ctrl($scope, a, b, c, d)
,那么您立即知道它依赖于什么。你注入了适当的模拟,你确保所有参与和控制你的控制器的人都是孤立的。如果您在编写测试时遇到麻烦,那么您很可能搞乱了抽象层次或违反了设计原则(直径法,封装法等)
是的,您很可能可以使用命名空间来正确管理对象的生命周期。在需要的地方定义单身人士,并确保没有人弄乱你的私人成员。 但老实说,如果框架可以为你做到,你会需要吗? 在我学习Angular之前,我一直没有使用JS“正确的方法”。这不是我不在乎,我只是没有必要,因为我只是为了一些UI的使用JS,主要是基于jquery。
现在它与众不同,我有一个很好的框架,它迫使我跟上一些好的做法,但它也给了我很大的力量来扩展它并利用JS的最佳功能。
当然,糟糕的程序员仍然可以打破最好的工具,但是从我最近读到的D.克罗克福德的“JS好的部分”中学到的东西,人们正在用它做一些令人讨厌的东西。感谢jQuery,Angular和其他很棒的工具,我们现在有了一些很好的工具,可以帮助编写优秀的JS应用程序并坚持最佳实践。
正如您所指出的,您至少可以通过执行以下三项操作来编写优秀的JS应用程序:
Angular只是通过以下方式来做到:
$injector
管理组件之间的依赖关系并在需要时检索它们$scope
链。答案 1 :(得分:0)
我们非常了解 Angular JS 及其在 Web 和移动应用程序开发中使用的各种框架。AngularJS 中的依赖注入提供了一种设计模式,可以在控制反转中实现以解决任何依赖关系。它主要用于定义特定组件、配置模块的块或提供。
要回答有关 AngularJS 依赖注入提供的好处的问题,让我们来看看。
简而言之,依赖注入意味着模块运行时的依赖功能。当使用 AngularJS 依赖注入时,它有助于在应用程序开发过程中拥有更多可重用的代码,并为应用程序的多个模块提供类似的功能。要了解有关 AngularJS 及其功能的更多信息,您可以访问此处并参与以了解有关 AngularJS 及其功能的更多信息。