ZF-4385: Create Zend_Controller_Action_Interface and make Standard Dispatcher check for it.
Currently the whole controller dispatcher and controller action components are very thighly coupled, since the Standard Dispatcher checks for an Zend_Controller_Action instance before dispatching. I propose to include a Zend_Controller_Action_Interface with just the constructor and the dispatch method required for any implementation. Make Zend_Controller_Action implement the new interface and the Standard Dispatcher to accept the interface as allowed action controller.
Advantages: * Standard Dispatcher (Dispatcher in general) and Action Controller are now lously coupled. * People can implement their own action controller following their needs. * No BC issues, only added a new interface, old functionality stays 100%. All Unit-Tests still succeed. * Even when MVC will be refactored in the future, this is still just a simple change that may lead only to problems for those who changed from the default Zend_Controller_Action implementation to a user-implemented one and those have probably to refactor anyways.
My use case would be to implement a new controller that handles everything as a SOAP request, you could of course insert any other webservice, so that a controller MyApp_Controller_Action_Soap will completly handle soap requests and still have all the advantages of a front controller approach. Currently you have to write non-DRY code for this or overwrite the Zend_Controller_Action class and have the problemt that many methods in the abstract class are public and even final, and can't be restricted access to.