2012-12-07 4 views
1

클래스 내에 데이터에 대한 복잡한 연산을 허용하는 많은 데이터가 포함 된 클래스가 있습니다. 클래스는 또한 일부 데이터를 검색 할 수있는, 즉 클래스에 포함 된 객체 인스턴스에 대한 참조를 검색 할 수있는 일부 멤버 함수를 가지고 있습니다. 모든 데이터는 RAM에 보관됩니다 (백그라운드에서 트랜잭션을 지원하는 DB가 없음).인스턴스 내의 데이터에 대한 트랜잭션?

이제는 일종의 트랜잭션 개념을 구현하고 싶습니다. 즉, StartTransaction() 메서드와 Rollback() 메서드를 추가하고 싶습니다. 내 문제가 시작되는 곳입니다. 개체 참조를 변경하지 않고 클래스 내의 데이터를 이전 상태로 복원하려면 어떻게해야합니까?

따라서 모든 복제 개념은 유용하지 않습니다.

이 접근법에 대한 해결책이 있습니까, 아니면 내가 따라 다니면 안되는 이상한 접근법입니까? 대안은 무엇입니까?

+0

찾고 계신 것이 트랜잭션 메모리를 지원해야합니다. 아마도 [이 Microsoft research] (http://research.microsoft.com/en-us/downloads/6cfc842d-1c16-4739-afaf-edb35f544384/default.aspx) 프로젝트가 도움이 될 수 있습니다. – Oded

+0

객체 지향 프로그래밍은 외부 세계에서 액세스 할 수없는 내부 상태로 설명되지만 객체 내부에서만 설명되는 객체에 관한 것입니다. 당신이 당신의 객체에 대한 연산을하고 싶다면 당신은 그 객체의 또 다른 유효한 상태로 인도 할 객체의 메소드를 호출해야합니다. 트랜잭션을 구현하려면 ACID 원칙을 구현해야합니다. 어떤 방법은 적절한 잠금을 사용하여 다중 스레드 환경에서이를 구현합니다. 데이터를 여러 액세스로부터 보호하려면 해당 데이터를 잠글 수 있습니다. 롤백의 경우 저장 값을 보유해야합니다. – Blim

답변

0

는 여전히 복제를 사용할 수 있지만 코드는 간접 새로운 차원의 필요

올드 :

class Data { int SomeValue; } 

class DataInternal { int SomeValue; } 
class Data { DataInternal internal; int SomeValue { get { return internal.SomeValue; } } 

당신은 저장 (DataInternal)에서 외부 인터페이스 (Data)를 분리 할 수 ​​있습니다. 누구나 눈치 채지 않고 복제하고 복원 할 수 있지만 internal입니다.

관련 문제