2012-08-01 4 views
2

본인에게는 직원 및 해당 직원 기록 테이블이 있습니다.봄 MVC 기반 웹 응용 프로그램에서 실행 취소 기능을 만드는 방법.?

두 테이블 모두 동일한 구조입니다. 히스토리 테이블은 일정 기간 동안 직원의 과거 변경 사항을 추적하는 데 사용됩니다.

이제 직원에게 변경된 사항에 실행 취소 기능을 추가해야합니다.

직원 명칭은 8 월 1 일에 변경됩니다. 이제 Employee 테이블의 직원 제목을 업데이트하고 employee_history 테이블에 해당 기록 레코드를 삽입합니다.

이제이 변경 사항을 취소해야합니다. 직원 편집 페이지에는 직원 옆에 실행 취소 단추가있는 날짜순 변경 사항 목록이 있습니다.

실행 취소를 클릭하면 Employee 테이블의 변경 사항을 이전 값으로 되돌려 야합니다. 또한 제목이 변경된 기록 테이블의 기록도 삭제해야한다고 생각합니다.

변경 사항을 직원 테이블로 되돌리려면 제목을 이전 제목으로 되돌리려면 삽입하지 않고 기록 테이블에 삽입합니다.

이 작업을 수행하는 최선의 방법이 무엇인지 잘 모릅니다.

어떤 제안 사항이 도움이 될 것입니다.

+5

나는 [명령 패턴]을 사용하는 것이 당신이 뭔가 콘크리트를 찾고 알고 있지만 (http://en.wikipedia.org/을 구현 한 것 같습니다 wiki/Command_pattern)을 디자인에 반영 할 수 있습니다 - 변경 사항을 캡슐화하는 장점 중 하나는 다중 레벨 실행 취소가 포함됩니다. –

+2

UI 프레임 워크 – kostja

+0

@kostja에 크게 의존합니다. 그것의 봄 MVC 기반 웹 응용 프로그램. – ashishjmeshram

답변

2

응용 프로그램 다시 시작/세션 시간 초과가 발생해도 유지할 수있는 "영구"실행 취소를 구현하려는 경우 DB 스키마 너비를 늘리는 것이 좋습니다. timestamp 필드를 삭제하고 마지막 항목을 삭제하거나 이전의 적절한 항목으로 바꾸십시오 기입.

"가벼운"버전은 스택을 사용하여 원래 값과 새 값을 포함한 마지막 상호 작용을 저장합니다. 물론 세션 무효화에 대한 스택을 유지할 수 있습니다. 이것은 당신이 실제로하는 것처럼 보입니다.

각 변경 사항에 대해 SQL 마이그레이션 스크립트를 작성 및 저장하고 변경 사항을 기록하고 가능하면 반대되는 작업을 통해이 솔루션을 확장 할 수 있습니다. 따라서 응용 프로그램 인스턴스와 환경간에 스크립트를 전송할 수도 있으며 DB 상태의 "재생 가능"상태를 유지하게됩니다.

TL; DR은 - 당신이 이미 좋은 해결책

0

실행 취소 및 실행 기록 데이터를 쓰는 동안 트리거/기록 논리를 알리는 플래그를 사용하여 제안을 권합니다.

일반적으로이 작업은 히스토리 테이블에서 시리얼 라이저 급으로 공급되고 직원 데이터를 복원 한 다음 나중에 히스토리 항목/잠금 해제 히스토리를 다시 정리함으로써 수행됩니다.

0

아마도 트랜잭션의 롤백 기능을 사용할 수 있습니다.