【发布时间】:2012-03-16 18:00:34
【问题描述】:
我开始编写流畅的界面,并查看了 Martin Fowler 写的关于流畅界面的旧文章(我没有意识到他和 Eric Evans 创造了这个术语)。在这篇文章中,Martin 提到 setter 通常会返回正在配置或处理的对象的实例,他说这违反了 CQS。
花括号世界中的通用约定是修饰符 方法是无效的,我喜欢它,因为它遵循的原则 命令查询分离。这个约定确实妨碍了 流畅的界面,所以我倾向于暂停这个约定 案例。
所以,如果我的流畅界面执行以下操作:
myObject
.useRepository("Stuff")
.withTransactionSupport()
.retries(3)
.logWarnings()
.logErrors();
这真的违反了 CQS 吗?
更新我分解了我的示例,以将日志记录警告和错误显示为单独的行为。
【问题讨论】:
-
logWarningsAndErrors是否返回任何内容?如果不是,那它真的是一个流畅的界面吗? -
@M.Babcock 更新了我的示例。当然,
logWarningsAndErrors返回一个我可以添加其他行为的接口。
标签: c# fluent-interface command-query-separation