Dans wikipedia, la définition de requête de commande de séparation, il est indiqué que
Plus formellement, les méthodes doit retourner une valeur seulement si ils sont referentially transparent et donc n'ont pas d'effets secondaires.
Si je lance une commande, comment dois-je déterminer ou de rapport si cette commande a été un succès, puisque, de par cette définition, la fonction ne peut renvoyer des données?
Par exemple:
string result = _storeService.PurchaseItem(buyer, item);
Cet appel a à la fois une commande et de la requête en elle, mais la requête de la partie est le résultat de la commande. Je suppose que je pourrais refactoriser cela en utilisant le modèle de commande, comme ceci:
PurchaseOrder order = CreateNewOrder(buyer, item);
_storeService.PerformPurchase(order);
string result = order.Result;
Mais il semble que c'est l'augmentation de la taille et de la complexité du code, ce qui n'est pas une orientation très positive de refactoriser vers.
Quelqu'un peut-il me donner une meilleure façon de réaliser la commande de requête de séparation quand vous avez besoin le résultat d'une opération?
Suis-je manqué quelque chose?
Merci!
Notes: Martin Fowler a ceci à dire à propos des limites de cqs CommandQuerySeparation:
Meyer aime utiliser la commande de requête de la séparation absolument, mais il y a des exceptions. L'affichage d'une pile est une bonne exemple d'un modificateur qui modifie état. Meyer correctement dit que vous pouvez éviter d'avoir cette méthode, mais il est une utile idiome. Donc, je préfère suivre ce principe quand je le peux, mais Je suis prêt à le casser pour obtenir mon pop.
De son point de vue, c'est presque toujours la peine de refactoriser vers la commande/de requête de séparation, à l'exception de quelques petites simple exceptions.