Are used to define a set of one or more actions, where an action is a method on a controller that handles incoming requests.
A controller can be any class:
- that’s name ends with “Controller”
- that inherits from a class called name ends with “Controller”
Note I tend to only have one action per controller, I apply a rule that says that everything that is injected into the constructor of a class must be used either directly or indirectly by every public method which generally results in single action controllers.
- Any matching class located in the “Controllers” folder
- Any class Inherited from Microsoft.AspNetCore.Mvc.Controllers
- The controller is responsible for initial processing of a request.
- Business decision should be performed within the a domain model.
- Accept the result of the domain model processing a request and return the result proper view along with the associated view data.
Note Personally I find it a bad idea for the view and domain model be the same class. They are dealing with different concerns so I consider it to be good SOLID practice to have them as different clases.
I prefer to provide access to the domain models via the command pattern.