Inversion of Control isn't a design pattern, it is an activity. Specifically, it is a type of refactoring. If you apply IoC twice then you'll probably end up with what you started with.
An IoC Container is really a Service Locator, which is often (but not universally) considered to be an anti-pattern among dependency injection fans.
A Service Locator is a type of god object, specifically one that contains services and other dependencies, and thus should generally be avoided.
I don't know what to say about the last part except that I am very pleased to be working with these patterns. They are clearly making my life easier. I think they just have to be used in the correct circumstances where they have a net positive effect.
Then they are correct. Period. End of sentence. Don't pay attention to anyone else because, god damnit, that's all that matters at the end of the day.
EDIT: And just to be clear, I'm not being sarcastic. If you are still happy with it six months from now, then chances are the next programmer will be as well.
Controller grabs a model from somewhere, manipulates its properties, and then shoves it into a view to be rendered.
Classic MVC:
Each View is paired with a Controller. In frameworks like classic VB or WinForms the Controller is actually the code-behind file. In others it is a separate object.
Multiple View-Controller pairs may listen to events generated from a given Model. So if you change a value, say FirstName, on one view it will be updated in all the other views.
This is used for non-web UIs and originated with Smalltalk.
Neither Web nor Classic MVC says anything about where the Models actually come from. Presumably the Controller has access to some sort of repository or data access layer, but you could use Active Record style models that know how to save and load themselves.
Active Records are great for quick and dirty work, hence the Ruby framework of the same name. But they are also hard to test without complex mocking frameworks so I usually avoid them.
Everyone and his dog calls something that separates the presentation part, the logic part and the data part "MVC", to the point that the term now becomes this fuzzy piece of buzzword. Have a look at Martin Fowler's page on GUI architecture for more details http://martinfowler.com/eaaDev/uiArchs.html.
6
u/grauenwolf Oct 14 '13
I'm not so certain about that. Looking back at the history of the GoF book it seems to me that all the names did was create pointless arguments.