2013-04-16 3 views
1

나는 내 머리 위로 다시 뚜렷한 느낌을 갖습니다. 몇 달 전에 코드를 검색하고 리플렉션을 사용하여 수정 한 시스템을 만들었습니다. 이것은 훌륭하게 작동했습니다. 이제 시스템을 재구성하고 약간의 측면을 일반화하려고합니다. 한 가지 내가하고 싶은 것은 가장 최근의 계산에서 변경된 사항에 대해 불가지론 자일 것입니다.외부화를 통한 계산 역전

그래서 예를 들어 마리오 프로그램을 실행하고 버튼을 누릅니다. 게임의 상태는 바뀌었지만 어떻게해야할지 모릅니다. 이 효과를 되돌려서 제 시간에 돌아가서 다른 버튼을 누를 수 있습니다. 내 계획은 다음과 같습니다 :

  • 효과를 적용했을 수있는 모든 게임 클래스를 구체화하십시오. 정적 값을 포함한 모든 비 최종 필드의 값을 저장합니다.
  • extern을 사용하여 모든 게임 개체를 작성합니다.
  • 변경하십시오.
  • extern을 사용하여 모든 게임 개체를 작성하십시오. 나중에이 상태로 돌아가려면
  • 변경 전 상태를 다시 읽습니다.

내 얼굴에서 어떤 것이 폭발 할 것입니까? 이것은 좋은 생각입니까? 아니면 일부 정적 필드/이상한 행동 엉망이 될 것인가? 외부화를 위해 필자는 Reflection을 통해 모든 필드의 목록을 요청하고 반복 순서로 작성하므로 아무 것도 놓치지 않을 계획입니다.

개조 - 외부화가 기존 태그가 아니므로 태그 직렬화를 사용했습니다. 희망은 그것이 ok 다.

EDIT - 로컬 변수 나 스택 또는 힙의 값이 필요하지 않습니다. 이것은 나중에 고려 사항 일 수 있습니다 - 특히 변경 사항 사이에서 파손되었을 수있는 객체의 존재/비 존재.

본질적으로 일반적인 계산 단계를 취소해야합니다. 이것이 가능한지 전혀 모른다.

+1

버튼을 누르기 전후의 로컬 변수, 스택의 현재 상태, 힙 메모리 및 명령 포인터의 현재 위치를 추적하려고합니까? 메모리에있는 객체 이외의 실행 프로그램의 "상태"에는 많은 것들이 관련되어 있습니다. – mellamokb

+0

좋은 질문입니다. 위에서 편집 하겠지만 짧은 대답은 '아니오'입니다. – mtrc

+1

게임 상태가 완전히 싱글 톤 독립인지 확인하는 것이 좋습니다. 'Things'라는 클래스가'listOfActiveThings'와 같은 정적 변수를 가지고 있다면, 여러분은 문제가있을 것입니다. – torquestomp

답변

1

질문이 잘못되었지만 찾고있는 것이 Aspect Oriented Programming 인 것 같습니다.
이미 Spring을 사용중인 경우이를 사용할 수 있습니다. 바퀴를 다시 만들려고 시도하지 마십시오.

+0

흥미 롭습니다. 저는 인턴이었을 때 봄을 한 번 사용했습니다. 그게 특별히 도움이되는 것은 무엇입니까? – mtrc

+0

이것은 구현하기에 좋은 방법입니다. 그러나 더 큰 문제는 처음에이 접근법이 의도 된 목표에 도달하는지 여부입니다. – mellamokb

+0

@mtrc :'AOP'를 사용하면 aspect를 통해 코드의 동작을 수정할 수 있고'Spring'은 이미 이것을 제공합니다. – Cratylus