Here are my thoughts: The purpose of using MVC is seperation of concerns and testability of gui logic. View should be able to work with different models and model should be able to work with different views.
I think controller class must implement an interface for mocking/testing reasons and view should call controller methods through this interface. But if we do so, then it becomes difficult to process view elements (textboxes, grids etc.) in controller. So these elements must be known by the controller somehow.
1. Do you expose these gui elements through the interface? Define controller classes as partial classes so that controller can directly process the gui elements (what about the interface then)? What do you do to solve this problem?
2. Basically, should controller implement more than one interface? One for view and another for model layer, to make view/model be able to work with different models/views via controllers?
3. Model layer also should implement an interface for mocking/testing?
How can we achieve our testing, loosely coupling, SoC purposes best? Please share your experience/thoughts.