일단 마무리를 지어야 할 것 같습니다.

구현은 다 했지만 테스트를 하기 위한 환경이 갖추어 지지 않았네요..

painter 쪽, 즉, 컨트롤러 쪽이 리팩토링을 해야 할 시기가 온것 같습니다..

오늘의 코딩 시나리오를 알려 드리죠.ㅋㅋ 

redo undo가 구현이 완료 되어서 history에 언제 넣는지 결정하고 소스의 해당부분에 코드를 집어

 넣으려고 했습니다. painter가 redoUndomanager와 symbolManager를 모두 갖고 있었기 때문에 

코드는 redoUndoManager.add(symbolManager.createMemento()); 였습니다.

하지만, 굳이 painter가 redoUndoManager를 가질 필요가 없다고 생각하여 symbolManager가 

redoUndoManager를 갖고 내부적으로 symbol들의 상태를 저장해야될 필요가 있을때 

redoUndoManager의 add함수를 호출 하는 식으로 루틴을 변경했습니다. 하지만, 이렇게 하면

세밀한 history를 저장하지 못하고, 불필요한 history를 저장할 수 밖에 없는 상화이 오므로 다시 원래 

대로 복구 했습니다. 이렇게 하는데 또다른 추가 사항이 생겼습니다.

속성창을 통해서 속성을 변경하게 된다면, 이것도 history에 저장해햐 하는데 propertyManager는 

undoManager와 symbolManger와 painter를 모르기 때문에 속성이 바뀐것에 대한 history저장을 

할 수 없다는 것을 알게 되었습니다. 물론, property manager가 위의 것들을 알면 되지만 이렇게 되면 

너우 서로 의존도가 심하기 때문에 결굴 모든것을 중단하고 painter, symbolManger, 

redoundoManager, propertyManager, 간의 중재를 해주는 무언가를 두어 리팩토링을 해야 겠다는 

결론을 내렸습니다. 어떻게 할까 생각 하던중, 그렇다면, painter에 있는 버튼 그룹도 추가하여 서로 중

재해주면 되겠다는 생각을 추가하게 되었고, 더이상 머리가 복잡해지고, 이미 집중력의 한계와 늦은 시

간이 되었기 때문에 마무리를 하게 되었습니다.

헥헥헥.....

일단 쉬었다가 좋은 정신력으로 제대로 된 설계를 해야 하겠습니다.

그럼 안녕히 주무세요....~~


신고
by danguria 2009.10.29 23:12
UndoRedo를 구현하기 위해서 Memento 패턴을 사용하고 있습니다.

Command패턴과 섞어서 쓰는 것이 맞는지 모르겠지만 일단 Memento만 이용하고 있습니다.

UndoRedo했을때 대상이 되는 상태를 심볼매니저에 있는 멤버변수들로 했습니다.

심볼매니저의 멤버변수에는 현재 캔버스에 그려진 심볼들, 사용자가 선택한 심볼들, 라인을 가질 후보 Figure

이 있습니다.

DSymbolManager가 Originator가 되고,

DMemento가 memento가 됩니다.

reodo undo를 하기 위해서 memento를 많이 갖고 있어야 하므로, 그것을 관리하는 UndoRedoManager를 만
들어 관리하도록 하였습니다.

클라이언트에 해당하는 painter클래스에 DSymbolManager와 UndoRedoManager를 가지고 redo undo를 

수행 하도록 했습니다.

내일 정보보호론 시험이 있는 관계로 설계만 하고 마쳐야 할 것 같습니다.


신고
by danguria 2009.10.25 12:04
| 1 |