When building complex applications the controllers can start to get unwieldy and very large, which may mean that you split them out into separate controllers. This may not be suitable as it will be reflected in the users experience. Ie. They will see the controller name in the URI.
For example: The default project that ships with MVC has an AccountController, that has actions for login, logoff, register etc.. which seems to violate the Single Responsibility Principle.
So the question is how to resolve this problem and separate out the concerns? An initial response could be just to create separate controllers. Ie.
AccountLoginController
AccountRegisterController
But this would not be a great experience from a customers point of view as it would effect the URI when requesting the resource.
A solution could be to have separate folders for each controller which contains separate class files for the action, each one with a single responsibility like so.
Controllers (folder)
Account (folder)
Register.cs
Login.cs
Logout.cs
AnotherController (folder)
Actionfile.cs
Actionfile.cs
The above would separate out the functionality and be highly cohesive.
So, this is a long explanation, but my questions are..
Has anyone implemented this before?
If so how do you go about it?
What are your thoughts regarding this pattern?
/Account/Registeror/AccountRegister? I find it hilarious that .net devs didn't give a shit about URIs until every MVC tutorial put routes as step 1. Have you ever been to ebay or Amazon? Those URIs are horrid, but they're still successful sites. You know why? Because they care about user experience. I'd spend my time worrying about the user experience on the actual site (functionality, layout, menu navigation, etc) than what the user sees in the address bar. /rant