2012-01-23 57 views
0

命令查询分离建议每个方法要么是执行的动作的命令,或数据返回到调用者查询:String类的replace()方法是否违反Command-Query Separation?

但对于String类的例如以替换()方法。

它的签名是:替换字符串(字符串str);

它违反了CQS,不是吗?

我承认,这违反了,我看不出我们如何解决它,以便取代(),它是一个命令可以通知最新字符串的调用者。确实,根据CQS的命令必须具有返回类型的无效。

+1

你有一个问题,或者你只是做一个观察?参见http://stackoverflow.com/faq#dontask –

+2

谁说Java甚至远程地遵循CQS?无论哪种方式,'replace'都不会改变它被调用的字符串。 –

回答

8

我不明白它是如何违反了 - 当然这是一个查询,因为它提出了一个有关数据的问题:什么将我们得到的,如果我们有原始字符串,而是用X来代替Y分别的时间?

这显然不是在副作用方面的指令 - 这是不可能的,因为字符串是不可变的。

我不会声称自己是什么接近上CQS的专家,但它String.replace听起来更像是一个比我的命令的查询。