Da quello che posso cogliere delle tue domande, dovresti esaminare l'uso di un livello di servizio applicativo tra il tuo controller e il tuo modello di dominio. Il controller utilizzerà Iniezione di dipendenza per il servizio dell'applicazione.
Il servizio orchestrerebbe quindi il tuo dominio e non contenesse alcuna logica di business. Il livello di servizio funge da confine tra il controller e il modello di dominio. L'aspetto dell'orchestrazione include il modo in cui i tuoi modelli di dominio vengono istanziati.
- MVC / UI layer
public UserController: Controller
{
private readonly IUserService _userService;
public UserController(IUserService userService)
{
_userService = userService;
}
public void SomeUserAction()
{
_userService.SomeUserAction();
}
}
- Service Layer
public UserService : IUserService
{
public void SomeUserAction()
{
//Orchestrate domain logic
}
}
In questo modo impedisce al controller di ingrassare. Il controller conserva solo i riferimenti a ciascun servizio applicativo richiesto.
Martin Fowler ha un bell'articolo sul Service Layer