2010-01-21 3 views
5

클라이언트 측에서 많은 JavaScript를 사용하여 사용자가 목록의 드래그 앤 드롭 재정렬, 항목 조회 등의 작업을 수행 할 수 있도록하는 ASP.NET 웹 응용 프로그램을 만들고 있습니다. 목록에 추가 (목록에 항목 추가, 목록에서 항목 삭제 등).JavaScript와 C# 개체 모델 간의 일관성 유지

클라이언트 항목마다 각 목록 항목을 저장하는 데 사용하는 JavaScript 클래스가 있습니다. 사용자가 항목에 대해 수행 한 작업 (추가, 편집, 삭제, 이동)에 대한 정보. 페이지가 서버에 게시되는 유일한 시간은 사용자가 완료 될 때입니다. 페이지가 제출되기 바로 전에 JSON에 대한 변경 사항에 대한 모든 정보를 직렬화하고 페이지의 숨겨진 필드에 저장합니다.

내가 찾고있는 것은 C#으로 내 수업을 만드는 방법에 대한 일반적인 조언입니다. JavaScript 클래스와 일치하는 C# 클래스를 사용하는 것이 좋을 것 같아서 JSON을이 클래스의 인스턴스에 deserealize 할 수 있습니다. 조금 이상하게 보일지라도, JavaScript 클래스를 직접 복제하고 자바 스크립트 UI 구현을 지원하기 위해 존재하는 클래스를 서버 측에 두는 것 같습니다.

이것은 추상적 인 질문입니다. 난 그냥 일치하는 클라이언트 및 서버 쪽 개체 모델을 유지 측면에서 비슷한 일을 다른 사람들이지도 양식을 찾고 있어요.

답변

1

의미가 있습니다. 이 문제에 직면했다면 데이터 유형이나 클래스에 대한 하나의 명확한 설명을 사용한 다음 해당 설명에서 코드를 생성하는 것을 고려할 것입니다.

설명은 자바 스크립트 소스 파일 일 수 있습니다. 당신은 그 JS에서 적절한 C# 코드를 생성하는 파서를 만들 수 있습니다. 또는 C# 소스 파일 일 수도 있고 그 반대 일 수도 있습니다.

RelaxNG에서이를 설명하고 C# 및 Javascript 용 생성기를 작성 (또는 찾음)하는 데 더 많은 유틸리티가 있습니다. 이 경우 RelaxNG 스키마는 소스 코드 컨트롤로 검사되고 생성 된 아티팩트는 확인되지 않습니다.


편집 : 또한 나뿐만 아니라이 점에서 도움이 될 생각 WADL라는 초기 사양이있다. 나는 WADL을 평가하지 않았다. 주변에, 나는 그것이 폭풍에 의해 세계를 가져 가지 않았다는 것을 알고 있지만, 왜 그런지 모르겠다. There's a question on SO regarding that.


EDIT2 : 감안할 때 도구의 부족 (WADL이 분명히 사산), 내가 당신이라면 나는이 전술을 시도 할 수 있습니다 :

  • 이 C#을 유형에 [DataContract] 속성을 사용하여 치료를 결정적인 것.
  • 컴파일 된 어셈블리에서 C# 형식으로 slurps하고 "object model definition"과 같은 일종의 샘플 XML JSON 문서에서 JsonSerializer를 사용하여 형식을 인스턴스화하는 도구를 빌드하십시오. 도구는 어떻게 든 인스턴스화 된 유형이 동등한 JSON으로 왕복 할 수 있는지, 어쩌면 결과물에 체크섬이나 CRC가 있는지 확인해야합니다.
  • 도구를 빌드 프로세스의 일부로 실행하십시오.

는 소스 코드에 "샘플 JSON 문서"인 것을 확인해야 할 것이다,이 일어날 수 있도록하려면, 당신은 또한 당신이 다양한 JS 코드에서 사용 된 형태가 있는지 확인해야 할 것 앱에서 Javascript가 동적이기 때문에 jslint 또는 다른 빌드 타임 확인 단계의 일부로 실행되는 유형 확인 자나 다른 것이 필요할 수도 있습니다. 그러면 Javascript 소스가 "표준"objbect 모델 정의를 사용하고 있는지 확인합니다. .

+0

감사합니다. RelaxNG를 사용하는 것은 흥미로운 아이디어입니다. 나는 최근에 Google 프로토콜 버퍼를 사용하여 자신의 언어를 사용하여 클래스를 정의하므로 코딩하는 언어에 관계없이 적절한 버전을 생성 할 수 있습니다. 이와 같은 아이디어를 적용하는 방법은 흥미 롭습니다. 다양한 시나리오와 기술에서 나는 이것을하기 전에 생각하지 않았다는 것을 믿을 수 없다. –

+0

예, 나는 protobufs도 생각했습니다. Protobufs .idl에서 나온 생성 된 코드가 protobufs serializer없이 사용할 수 있는지 궁금합니다. 그렇다면 .NET에서 protobufs 도구가 생성하는 C# 코드를 사용하여 JsonSerializer를 사용할 수 있습니다. – Cheeso

+0

그래서 C# 클래스의 직렬화 된 인스턴스를 내 데이터 구조를 나타내는 JSON이 포함 된 정적 문서와 비교할 것을 제안합니다. 일치하는 경우 나는 C# 클래스가 옳다는 것을 안다. 그런 다음 JavaScript에서 동일한 클래스의 인스턴스를 JSON 문서와 비교하고 일치하는 경우 직렬화 및 비 직렬화 문제없이 클라이언트에서 서버로 데이터를 앞뒤로 교환 할 수 있는지 확인합니다. –