I once had abstracted a complex application as a directed graph that have only nodes and edges. From there I STIed most of my business entities.
The resulting app had only two tables and complexity relating to the network was nicely separated from business objects. Which was kind of beautiful.
Now, about testing. Testing of controllers is the key, you say?
Strange enough, I think that unit tests (models) are the most important. Because controllers are dumb, and often they are not even the only way to access the logic.
What if your application is called by some AJAX framework that has its own MVC built-in, like Dojo?
If the design is right, I can get all of my app's functionality from command line, ignoring the controllers completely.
I've got mixed feeling about STI. We're using it for one of our larger projects with success. I don't like that they recommend polymorphism for everything; this makes iterating collections of the interface very difficult.
Controller tests are actually really important for a few reasons; one of the more obvious being user authentication. While our controllers tests are anemic when compared to our model tests, we do test the more heavily used controllers.
I once had abstracted a complex application as a directed graph that have only nodes and edges. From there I STIed most of my business entities.
The resulting app had only two tables and complexity relating to the network was nicely separated from business objects. Which was kind of beautiful.
Now, about testing. Testing of controllers is the key, you say?
Strange enough, I think that unit tests (models) are the most important. Because controllers are dumb, and often they are not even the only way to access the logic.
What if your application is called by some AJAX framework that has its own MVC built-in, like Dojo?
If the design is right, I can get all of my app's functionality from command line, ignoring the controllers completely.