Я начал писать свободный интерфейс и взглянул на более раннюю статью Мартина Фаулера, написанную о плавных интерфейсах (я не знал, что он и Эрик Эванс придумали этот термин). В статье Мартин упоминает, что сеттеры обычно возвращают экземпляр настраиваемого или обрабатываемого объекта, что, по его словам, является нарушением CQS.
Обычное соглашение в мире фигурных скобок заключается в том, что модификатор методы недействительны, что мне нравится, потому что они следуют принципу Разделение командных запросов. Эта конвенция мешает беглый интерфейс, поэтому я склонен приостановить действие конвенции для этого кейс.
Итак, если мой интерфейс Fluent делает что-то вроде:
myObject
.useRepository("Stuff")
.withTransactionSupport()
.retries(3)
.logWarnings()
.logErrors();
Действительно ли это нарушение CQS?
ОБНОВЛЕНИЕЯ разбил свой пример, чтобы показать предупреждения и ошибки журналирования как отдельные поведения.