기본 콘텐츠로 건너뛰기

라벨이 Stack인 게시물 표시

Undo, Redo 개선

요즘 대부분의 프로그램에서 Undo, Redo 기능을 지원하고 있습니다. 고객사에서 Undo 기능이 제대로 동작하지 않는다고 오류 접수를 해서 코드를 확인해 보니 아래와 같이 되어 있었습니다. public class UndoRedoData { /// 현재 화면에 보이는 아이템의 레퍼런스 public CommentUserInfo Item { get; set; } /// 아래는 Undo, Redo를 하기 위한 속성들 public List<Point> PointSet { get; set; } public double LineSize { get; set; } public DoubleCollection DashSize { get; set; } public Double Opacity { get; set; } public Controls.Common.PaintSet paint { get; set; } public double Angle { get; set; } } 이 코드를 보는 순간 '잘못 되었구나'라는 생각이 들었습니다. Item 속성 밑에 있는 것들은 모두 CommentUserInfo 클래스의 속성들 중 일부였습니다. 아마도 이 코드를 작성한 개발자는 Undo, Redo 기능을 개발하면서 필요한 속성들을 그때 그때 추가한 것 같았습니다. 'LineSize는 적용되는데 DashSize는 적용 안되네'하고 DashSize를 추가하고 마찬가지로 Opacity, Angle도 그렇게 추가한 것 같았습니다. 나중에 추가 기능이 필요해서 CommentUserInfo에 속성을 추가하면 UndoRedoData에도 속성을 추가해야 합니다. 관리해야 할 지점이 2군데가 되고 그만큼 버그가 발생할 확률도 높아집니다. 이런 식의 작업은 계속 속성들을 추가할 것이고 결국에는 CommentUserInfo와 같아질 것입니다. 따라서 UndoRedoData에 ...