우리는 같은 개체에서 여러보기 및 편집기를 지원하는 아키텍처를 고려하고 있습니다. 요구 사항은 전체 개체에 대해 수행 된 변경을 커밋하거나 취소 할 수있는 가능성입니다.여러보기, 편집기 및 커밋/취소 동기화
우리의 요구 사항이 입니다 - 많은의 같은 시간에 편집 된 객체의 (최대 다중 선택 모드에서 10.000) - 동시에 여러 뷰와 에디터 -에서 기타에 반영해야 개체에 대한 편집기에 변화 뷰를 성공적으로 완료 한 후 - 편집기의 개체는 전체적으로 커밋 가능/취소 가능이어야합니다.
동적 래퍼 방식 (http://www.codeproject.com/KB/cs/dynamicobjectproxy.aspx#EditableProxy%28implementingIEditableObject%299)을 포함하여 몇 가지 개념을 살펴 보았습니다. - 동적 인 Intellisense가 없음 - 컴파일 타임에 동적 검사가 없음 - 액세스 속성을 반복 할 때 (예 : 속성 그리드에 대한) 우리는 그림
각 편집기는 원본 객체의 자신의 클론을 얻을에 건축 설계의 프로토 타입을 구현했습니다
매우 비싸다. 그런 다음 작업을 수행하여 유효성을 검사하고 imodelrepository에 커밋 할 수 있습니다. 그렇게하면 원본 객체가 업데이트되고 각 복제본에 대해 backendchanged 이벤트가 전송됩니다. 이제 다른 backendchanged 이벤트에 등록 편집자와의 viewmodels이 변경
긍정적 인 측면
을 반영하기 위해 새로운 클론을 얻을 수 있습니다 - 각 편집기를 수 - imodelrepository은 원래의 직접 편집이 금지, 클론을 출력 그것의 자신의 복제품에 작동하십시오 - 1 명의 편집자가 변화를 투입하는 경우에 다른 복제품을 알리고 거기 내용을 새롭게하는 방법이있다 그러나 부정적인 양상은 : - 각 편집자 또는 구경꾼 viewmodel는 보내진 backendchanged 목표를 찾아야한다 원래 개체가 변경된 경우 새로운 복제본을 가져와 이전 객체를 버려야합니다. - 다른 편집기가 객체를 삭제하면 각 편집자/뷰어는 객체 삭제 이벤트를 찾아야합니다. 그런 다음 복제본을 버릴 필요가 있습니다. - 많은 수의 복제가 필요하므로 시스템이 느려집니다. 특히 편집 된 객체에서 동시에 많은 수의 객체가 사용되는 경우가 있습니다.등록 된 뷰 모델에 원본을 전달할 생각입니다. 시청자 전용, 실제 편집자를위한 클론 사용하기. 그러면 필요한 클론 수가 줄어 듭니다. 그러나 시청자를 위해 독창적 인 독창성을 보장 할 수있는 방법은 없습니다 (동적 읽기 전용 래퍼는 위에 언급 된 editableproxy와 동일한 문제를 일으킴).
접근 방식을 단순화하는 방법이나 아이디어를 얻는 데 도움이되는 의견이나 제안은 감사 할 것입니다. 다른 아키텍처
THX
편집자는 동일한 사용자/컴퓨터에서 사용하거나 원격입니다. 얼마나 빨리 변경 사항을 반영 하시겠습니까? - 모든 필드가 변경되거나 커밋 만됩니까? –
편집자는 모두 같은 컴퓨터에 있습니다. 우리 시스템은 커밋의 변경 사항 만 반영하면 충분합니다. – manni
즉시 변경 사항이 반영되고 커밋 제거 (실행 취소 옵션 사용)해도됩니까? –