Являются ли плавные интерфейсы нарушением принципа разделения команд и запросов?

Я начал писать свободный интерфейс и взглянул на более раннюю статью Мартина Фаулера, написанную о плавных интерфейсах (я не знал, что он и Эрик Эванс придумали этот термин). В статье Мартин упоминает, что сеттеры обычно возвращают экземпляр настраиваемого или обрабатываемого объекта, что, по его словам, является нарушением CQS.

Обычное соглашение в мире фигурных скобок заключается в том, что модификатор методы недействительны, что мне нравится, потому что они следуют принципу Разделение командных запросов. Эта конвенция мешает беглый интерфейс, поэтому я склонен приостановить действие конвенции для этого кейс.

Итак, если мой интерфейс Fluent делает что-то вроде:

myObject
  .useRepository("Stuff")
  .withTransactionSupport()
    .retries(3)
  .logWarnings()
  .logErrors();

Действительно ли это нарушение CQS?

ОБНОВЛЕНИЕЯ разбил свой пример, чтобы показать предупреждения и ошибки журналирования как отдельные поведения.

6
задан David Hoerster 16 March 2012 в 19:27
поделиться