原文出处:http://www.alexrothenberg.com/2013/02/11/the-magic-behind-angularjs-dependency-injection.html

 

这篇文章主要是要探讨 AngularJS 的 DI 机制,但我觉得还有令一个重点是再留言的部份,就是提到了 Require 和 DI 的差别,AngularJS 的作者 misko 的叙述如下:

 

Require and DI are similar concepts. Because they are similar developers often get confused and they think they can substituted one for the other, but in reality they are complementary.

require.js is concerned with loading the right code into the VM in the right order once before the application can run.
DI is concerned by instantiating the right classes in the right order many times during the application runtime.

The key differences are loading vs instantiating, classes vs instances, as well as once before application start vs many times during application runtime.

One needs to load the code before the code can be instantiated, hence the complementary nature of the two.

There is also a difference of scope and granularity. Require.js works on file level, and while you can essentially link different files at lead-time, once the files are linked, the relationships are fixed.

DI works on class level. It answers a question such as Class A needs Interface B, where do I get B from. While require.js can substituted different B code at load time, DI can chose among different instance of same B class or different subclass based of the context of where A is instantiated.

 

以上很清楚的说明,RequireJS 和 DI,两者其实是可以同时存在,因为是互补的关系,不过我通常是两者选其一,除非我今天写的案子大到像是 Gmail 一样,我才可能会考虑用 RequireJS,不然其实 DI 很够用了。

查看原文 >>
相关文章