에 복잡한 개체의 상태를 해싱 어떤 배경 정보 : 나는 기본적으로 생성, 편집, 저장 및 일부 데이터 모델의 로딩하는 C의 #/WPF 응용 프로그램 작업입니다.NET
.
데이터 모델에는 다양한 개체의 계층 구조가 포함됩니다. 클래스 A의 "루트"오브젝트가 있는데, 클래스 B의 오브젝트 목록이 있으며, 클래스 C의 오브젝트 목록이 있습니다. 전체적으로 약 30 개의 클래스가 있습니다.
이제 내 문제는 사용자에게 "저장하지 않은 변경 사항을 저장하고 저장 하시겠습니까?"라고 묻는 것입니다. 그가 프로그램을 종료하려고하면 대화 상자가 나타납니다. 그러나 현재로드 된 모델의 데이터가 실제로 변경되었는지 어떻게 알 수 있습니까?
물론이를 해결할 방법이 있습니다. 파일에서 모델을 다시로드하고 값으로 메모리 값과 비교하거나 모든 UI 컨트롤에서 모델이 변경되었음을 나타내는 플래그를 설정합니다. 대신로드시 모델 상태를 기반으로 해시 값을 만들고 사용자가 종료하려고 할 때 새 값을 생성하고이 두 값을 비교하려고합니다.
는 이제 질문 : 어떤 임의의 복잡한 객체의 (값) 상태에서의 해시 값을 생성 할 수있는 방법이 존재하는 경우
그래서 그 영감이 궁금 해서요? 바람직하게는 일반적인 방법으로, 예를 들면. 각 관련 클래스/필드에 속성을 적용 할 필요가 없습니다.
한 가지 아이디어는 .NET의 직렬화 기능을 사용하는 것일 수 있습니다 (이 경우 out-of-the-the-box를 사용한다고 가정). 결과 파일의 내용에 해시 함수를 적용합니다. 그러나, 나는 더 적절한 접근법이 존재한다고 생각한다.
미리 감사드립니다.
편집 : 해싱 가능한 충돌에 대해 촬영
포인트. 대신 나는 값으로 가치를 깊이 비교할 것입니다. 난 이미 XML serializer를 사용하여 영속성을 유지하고 있으므로 문자를 직렬화하고 비교할 것입니다. 예쁜 것은 아니지만이 경우 트릭을 수행합니다.
찍은 포인트. 나는 두 객체의 값 기반 비교와 관련된 문제를 수정하겠다고 생각한다. – Jan