Coming closer to the end of writing my first really complex app, I’m beginning to wish I’d taken the time at the start to properly learn and grasp some of the concepts that I see other programmers using. My client-side code uses a basic MVC pattern, but a bunch of Flash Developers use something that to me comes across as much more complex – as seen in RobotLegs or some of the Haxe ports, such as MMVC.
These frameworks are all about Inversion Of Control (and because we love acronyms: IOC). And they use Dependency Injection (DI) to do this. You can see already why the learning curve can be steep, especially if you haven’t come across this pattern before.
So today I googled “I don’t understand dependency injection” and got this fantastic explanation by Kevin William Pang. I found that really helpful, and I’m sold. I’d been wondering how the hell I was supposed to unit-test some of my more complex client code anyway… If you’re one that, like me, hasn’t understood this concept in much detail: his article is well worth a read, I won’t bother to try and explain it here.
But, I’m still not sure where the fancy dependency injection tools and frameworks come in. I see the value in it, and I think “injecting” it into the constructor by using arguments given to the constructor seems just fine. Meanwhile, the tools which are supposed to help, such as SwiftSuspenders or Minject seem to me to be really verbose, and not offer a lot more than the constructor method.
Maybe that style is more relevant for gaming. Or maybe it’s benefits show up with more complex projects. Or maybe I just haven’t been enlightened.
Either way, I’ll try to get enlightened… I think it’s worth spending time learning these patterns. They’ve obviously gained traction for a reason, and a lot of better developers than me swear by them, so I’ll try wrap my head around it. Maybe one day it’ll seem as clear to me as MVC, or even OOP do now (both of which took me a while at first).
If you have any suggestions / comments / explanations – I’d love to hear them in the comments section.