// 符合CQS原则编码正例
public void roll()
{
faceValue = // random num generation
}
public int getFaceValue()
{
return faceValue;
}
//违背CQS原则编码反例
public int roll()
{
faceValue = // random num generation
return faceValue;
}
你可以发现大量使用风格2的代码的例子, 但这种方法并不合适, 因为它违反了命令-查询分离原则(Command-Query Separation Principle). CQS是针对方法的经典OO设计原则. 该原则指出, 任何方法都可能是如下情况之一:
1. 执行动作(更新,调整...)的命令方法, 这种方法通常具有改变对象状态等副作用, 并且是void的.
2. 向调用者返回数据的查询, 这种方法没有副作用, 不会永久性的改变任何对象的状态.