Шаблон CQS против выходной переменной

В паттерне разделения запросов команд указывается, что должно быть очевидно, является ли метод командой или запросом (я имею в виду простой принцип, а не CQRS с источником событий и т. Д.)

Поэтому команда должна быть voidтогда как запрос должен возвращать значение.

public interface IRepository<T>
{
    void Create(Guid id, T item);
    int GetHumanReadableId(Guid id);
    // other members
}

Это обсуждается, например, в посте Марка Симанна: http://blog.ploeh.dk/2014/08/11/cqs-versus-server-generated-ids/

Мне интересно, где выходная переменная приближается к земле? Это нарушает CQS?

Я имею в виду следующее:

public interface IRepository<T>
{
    void Create(T item, out int humanReadableId);    
    // other members
}

Похоже, что это делает метод пустым, указывая тем самым команду, и в то же время позволяя "получать" некоторый вывод из нее без отдельного явного запроса - в конце концов, дополнительный явный запрос, такой как int GetHumanReadableId(Guid id); означает 1) больше кода для написания и поддержки, 2) дополнительный вызов базы данных.

1 ответ

Я думаю, что humanReadableId должен быть свойством элемента, который вставляется методом. Так что это должно быть установлено в методе create, и вам не нужно запрашивать его.

Другие вопросы по тегам