拉解析和CQS

时间:2015-04-07 20:00:09

标签: c# oop command-query-separation

我正在创建一个拉解析器,它在很大程度上依赖于按顺序读取字符。解析器的状态随着字符的读取而变化,因此我们可以说有一个“上下文”指定了下一个字符的解释方式。

问题是我经常发现有些方法应该是查询,但它们也会修改状态。

例如,这种方法:

private void string ReadIdentifier() 
{
    string identifier = ReadUntilTheseCharsAreFound("=", ";");
    if (this.lastChar != "=")
    {
        this.state = States.ReadingProperty;
    } 
    else 
    {
        this.state = States.ReadingValue;
    }

    return identifier;
}

正如您所看到的,这不仅会检索标识符,还会更改状态。如果最后一个字符是“=”,则状态为1,如果是“;”国家是另一个。

这不符合CQS原则,我不太喜欢它:(

但鉴于它是一个解析器,也许这是最好的方法。所以我的问题是:你能想到一个更好的方法来做到这一点而不打破CQS吗?

谢谢!

0 个答案:

没有答案
相关问题