В определении wikipedia разделение запросов запроса указано, что
Более формально методы должны возвращать только значение если они ссылочно прозрачны и, следовательно, не имеют побочных эффектов.
Если я выдаю команду, как мне определить или сообщить, была ли эта команда успешной, поскольку по этому определению функция не может вернуть данные?
Например:
string result = _storeService.PurchaseItem(buyer, item);
В этом вызове есть как команда, так и запрос, но часть запроса является результатом команды. Думаю, я мог бы реорганизовать это, используя шаблон команды, например:
PurchaseOrder order = CreateNewOrder(buyer, item);
_storeService.PerformPurchase(order);
string result = order.Result;
Но похоже, что это увеличивает размер и сложность кода, что не очень позитивно относится к рефактору.
Может ли кто-нибудь дать мне лучший способ добиться разделения командного запроса, когда вам нужен результат операции?
Я что-то пропустил?
Спасибо!
Примечания: Мартин Фаулер говорит об ограничениях cqs CommandQuerySeparation:
Мейер любит использовать командный запрос разделение абсолютно, но есть исключения. Попытка стека хорошая пример модификатора, который изменяет государство. Мейер правильно говорит, что вы может избежать этого метода, но он является полезной идиомой. Поэтому я предпочитаю следуйте этому принципу, когда я могу, но Я готов разорвать его, чтобы поп.
По его мнению, почти всегда стоит рефакторировать для разделения команд/запросов, за исключением нескольких незначительных простых исключений.