Шаблон 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, и вам не нужно запрашивать его.