Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

The point is, inverting control doesn't need a three letter acronym in Ruby, it is built into the language. You get those things automatically. No javascript programmer ever talked about singletons, and no Ruby programmer ever built an IoC container, because they are not needed. It's a mistake to think these are fundamental elements to programming, they are byproducts of particular languages.


Actually there is a framework: https://github.com/JoshCheek/deject

Have't tested it yet but it makes a lot of sense.

Redefining a class isn't dependency injection it's a hack to get the compiler to stop complaining. It works but it's very unclear to the person reading the program that a class your code depends on was actually redefined somewhere else.

For testing purposes placing this mock class somewhere at the start of your code is clear but only ever practical in that scenario.

I can also imagine that some programmers might not even think of the possibility that some code they depend on was overridden somewhere else.

In real maintainable code where you want to swap out behaviours it's nice if there was a special way of defining your dependencies. This is the same for all languages.

Deject offers a way so you don't have to fiddle with constructors but instead you have handles in your classes that you can override with different behavior if needed.

TL;DR: Yes, Ruby is powerful and you technically don't need IoC containers. But to make it maintainable for everyone it's a good idea to do so anyway.


Even if you don't give it a name, you are still doing it.


Yes, Like IntegerFloatAdding. If a programming language needs a pattern for adding an integer and a float, well, you have to call this pattern something. Until such a language is made, we can forget about "IntegerFloatAdding Pattern".




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: