元に戻す/やり直しをサポートする必要があるプログラムを C# で作成しています。この目的のために、私は Command パターンに落ち着きました。tldr、ドキュメントの状態を操作するすべての操作は、ドキュメントの以前の状態と必要な変更を認識し、それ自体を実行/元に戻すことができる Command オブジェクトによって実行する必要があります。
単純な操作では問題なく機能しますが、ドキュメントの複数の部分に一度に影響を与える操作があります。同様に、Command オブジェクトは、元に戻す必要がある場合に備えて保持する必要があるすべての古い状態を認識できるほど十分にスマートでなければなりません。
問題は、パブリック インターフェイスを使用してすべての状態を公開すると、誰かがインターフェイスを直接呼び出そうとした場合に誤用される可能性があり、状態の破損につながる可能性があることです。私の直感では、これを行うための最もオブジェクト指向の方法は、特殊化された Command クラスを公開することです。ドキュメントの状態を直接操作できるようにするのではなく、そのドキュメントにアクセスできる Command オブジェクトを作成するようにドキュメントに要求するだけです。内部状態であり、元に戻す/やり直しを適切にサポートするのに十分なことが保証されています。
残念ながら、C# はフレンドの概念をサポートしていないため、ドキュメントの内部にアクセスできる Command クラスを作成することはできません。ドキュメント クラスのプライベート メンバーを別のクラスに公開する方法はありますか、または多くのドキュメントの内部を公開することなく、必要なことを行う他の方法はありますか?