我开始编写流畅的界面,并查看了 Martin Fowler 写的关于流畅界面的旧文章(我没有意识到他和 Eric Evans 创造了这个术语)。在这篇文章中,Martin 提到 setter 通常会返回正在配置或处理的对象的实例,他说这违反了 CQS。
花括号世界中的常见约定是修饰符方法是无效的,我喜欢它,因为它遵循 CommandQuerySeparation 的原则。这个约定确实妨碍了流畅的界面,所以我倾向于暂停这种情况下的约定。
因此,如果我的流利界面执行以下操作:
myObject
.useRepository("Stuff")
.withTransactionSupport()
.retries(3)
.logWarnings()
.logErrors();
这真的违反了CQS吗?
更新我打破了我的示例,将日志记录警告和错误显示为单独的行为。