我正在用 C# 编写一个需要支持撤消/重做的程序。为此,我选择了命令模式;tldr,操作文档状态的每个操作都必须由一个 Command 对象执行,该对象知道文档的先前状态以及需要进行的更改,并且能够自行执行/撤消。
它适用于简单的操作,但我现在有一个操作会同时影响文档的多个部分。同样,Command 对象必须足够聪明,知道它需要保留的所有旧状态,以防它需要撤消。
问题是如果有人试图直接调用接口,使用公共接口暴露所有状态有可能被滥用,这可能导致状态损坏。我的直觉告诉我这样做的最面向对象的方法是公开专门的 Command 类——而不是让您直接操作文档的状态,您所能做的就是要求文档创建一个可以访问其的 Command 对象内部状态,并保证足够了解以正确支持撤消/重做。
不幸的是,C# 不支持朋友的概念,所以我无法创建一个可以访问文档内部的 Command 类。有没有办法将文档类的私有成员暴露给另一个类,或者有没有其他方法可以做我需要的事情而不必暴露很多文档内部?