4 ms·
For example, if an instance of House requires a Door it is not enough to just require('Door'). You still have to do the equivalent of `new Door()` in your House
by kyllo 12y ago
For example, if an instance of House requires a Door it is not enough to just require('Door'). You still have to do the equivalent of `new Door()` in your House module to get an instance. By doing so within the House module you just tightly coupled House to Door (your House now knows how to create Doors).
So what? What is so bad about House and Door being "tightly coupled"? Here's a House constructor that can take any kind of Door instance:
function House(door){
this.door = door;
}
This is JavaScript, let's stop trying to make it into Java.
- nilliams 12y agoWhat you just wrote as a code example is Dependency Injection, it's just manual dependency injection as opposed to using an IOC container or any of the mechanisms Angular provides. I am very much in favour of the approach you posted. That's exactly how I write my code (I don't currently use Angular), but yep ... that's DI. As James Shore said 'Dependency Injection is a 25-dollar term for a 5-cent concept'. [1]. What you show in that code example is what in my head I call "poor man's DI" or ... "passing stuff in" but it's actually my favourite kind as it demonstrates the fundamental idea and is easy to explain to people - as soon as you start talking about IOC and service providers things start to get murkier. I think that's definitely where Angular is losing some people. You can get a long way with the basic "poor man's" approach. [1] http://www.jamesshore.com/Blog/Dependency-Injection-Demystified.html http://www.jamesshore.com/Blog/Dependency-Injection-Demystif...
- fetbaffe 12y agoI remember the first time I heard the term Dependency Injection. I sounded really advanced and I felt like a fool not knowing about. Like have been living under a rock for last years. When I realized it was "passing stuff in" I wanted to shout, I have done that for years!
- coldtea 12y ago>When I realized it was "passing stuff in" I wanted to shout, I have done that for years! Well, it's the "automatic" part that is important, not just the DI.
- kyllo 12y agoSo the setter gets called automatically, but now you have to store the object names as strings or in an XML file. How is that better?
- watty 12y agoI felt the same way about DI until I watched this video: http://www.youtube.com/watch?v=_OGGsf1ZXMs http://www.youtube.com/watch?v=_OGGsf1ZXMs
- ggregoire 12y agoGreat video!
- acjohnson55 12y agoFantastic video. I think it nails what DI is good for, and furthermore, what a DI framework is good for. Not only that, but it's a faaaaar more elegant solution than what's been in Angular so far.