실행 취소/다시 실행을 지원해야하는 프로그램을 C#으로 작성했습니다. 이를 위해 Command 패턴을 정했다. tldr 일 때, 문서 상태를 조작하는 모든 조작은 문서의 이전 상태에 대해 알고있는 명령 오브젝트에 의해 수행되어야하며 변경이 필요하고 변경/실행 취소가 가능해야합니다.C#의 명령 패턴 및 복합 연산
간단한 조작에서는 문제가 없지만 한 번에 문서의 여러 부분에 영향을주는 작업이 있습니다. 마찬가지로 명령 객체는 실행 취소해야 할 경우를 위해 보존해야하는 모든 이전 상태를 알만큼 충분히 똑똑해야합니다.
공개 인터페이스를 사용하는 모든 상태가 노출되면 누군가가 인터페이스를 직접 호출하려고 시도 할 때 오용의 가능성이 있으므로 상태가 손상 될 수 있습니다. 내 insticts이 일을하는 가장 일반적인 방법은 특수 Command 클래스를 노출하는 것입니다 - 당신이 직접 문서의 상태를 조작 할 수 있도록, 당신이 할 수있는 모든 명령 개체에 액세스 할 수있는 명령 개체를 만들 것을 요청하는 것입니다 내부 상태이며 실행 취소/다시 실행을 적절히 지원할만큼 충분히 알 수 있습니다.
불행히도 C#은 친구 개념을 지원하지 않으므로 문서 내부에 액세스 할 수있는 Command 클래스를 만들 수 없습니다. 문서 클래스의 비공개 멤버를 다른 클래스에 노출시키는 방법이 있습니까, 아니면 많은 문서 내부를 노출시키지 않고도 필요한 것을 수행 할 수있는 다른 방법이 있습니까?
명령 패턴이 아닌 실행 취소/다시 실행 작업을 처리 할 때는 일반적으로 Memento 패턴을 사용합니다. 명령 패턴은 "무언가를 실행"해야 할 때 더 적합합니다. 원격 제어를 프로그래밍 할 때 각 버튼에 명령이 주어집니다. – Patrick
'불행히도 C#은'다행스럽게 '읽어야하는 친구의 개념을 지원하지 않습니다. 언어를 가지고 있으면 발을 쏘는 데 도움이되지 않습니다. –