Je me souviens encore du bon vieux temps des référentiels. Mais les référentiels devenaient laids avec le temps. Ensuite, le CQRS s'est généralisé. Ils étaient gentils, ils étaient une bouffée d'air frais. Mais récemment, je me suis demandé à maintes reprises pourquoi je ne maintiens pas la logique dans la méthode Action d'un contrôleur (en particulier dans Web Api où l'action est une sorte de gestionnaire de commandes / requêtes en soi).
Auparavant, j'avais une réponse claire à cela: je le fais pour les tests, car il est difficile de tester Controller avec tous ces singletons immuables et la laideur globale de l'infrastructure ASP.NET. Mais les temps ont changé et les classes d'infrastructure ASP.NET sont beaucoup plus conviviales pour les tests unitaires de nos jours (en particulier dans ASP.NET Core).
Voici un appel WebApi typique: la commande est ajoutée et les clients SignalR en sont informés:
public void AddClient(string clientName)
{
using (var dataContext = new DataContext())
{
var client = new Client() { Name = clientName };
dataContext.Clients.Add(client);
dataContext.SaveChanges();
GlobalHost.ConnectionManager.GetHubContext<ClientsHub>().ClientWasAdded(client);
}
}
Je peux facilement le tester / me moquer. De plus, grâce à OWIN, je peux configurer des serveurs WebApi et SignalR locaux et faire un test d'intégration (et assez rapide d'ailleurs).
Récemment, j'ai ressenti de moins en moins de motivation pour créer des gestionnaires de commandes / requêtes encombrants et j'ai tendance à conserver le code dans les actions Web Api. Je ne fais une exception que si la logique est répétée ou si c'est vraiment compliqué et je veux l'isoler. Mais je ne sais pas si je fais la bonne chose ici.
Quelle est l'approche la plus raisonnable pour gérer la logique dans une application ASP.NET moderne typique? Quand est-il raisonnable de déplacer votre code vers des gestionnaires de commandes et de requêtes? Y a-t-il de meilleurs modèles?
Mise à jour. J'ai trouvé cet article sur l'approche DDD-lite. Il semble donc que mon approche consistant à déplacer des parties compliquées de code vers des gestionnaires de commandes / requêtes puisse s'appeler CQRS-lite.