命令-查询分离“规定每个方法要么是执行操作的命令,要么是向调用者返回数据的查询,但不能两者兼而有之。换句话说,提出问题不应改变答案。”
a = [1, 2, 3]
last = a.pop
在这里,在 Ruby 中,pop
命令返回从数组中弹出的项目。
这是一个方法中的命令和查询示例,似乎有必要这样做。
如果是这种情况,拥有一个本质上既是查询又是命令的方法真的是代码异味吗?
命令-查询分离“规定每个方法要么是执行操作的命令,要么是向调用者返回数据的查询,但不能两者兼而有之。换句话说,提出问题不应改变答案。”
a = [1, 2, 3]
last = a.pop
在这里,在 Ruby 中,pop
命令返回从数组中弹出的项目。
这是一个方法中的命令和查询示例,似乎有必要这样做。
如果是这种情况,拥有一个本质上既是查询又是命令的方法真的是代码异味吗?
堆栈弹出是 CQS 的一个众所周知的例外。 Martin Fowler指出这是打破规则的好地方。
我会说在这种情况下它不是代码气味,但总的来说它是代码气味。