Estoy trabajando en una aplicación web ASP.NET que usa mucho JavaScript en el lado del cliente para permitir al usuario hacer cosas como reordenar listas, arrastrar y soltar, buscar elementos para agregar a la lista (como las sugerencias en la barra de búsqueda de Google), eliminar elementos de la lista, etc.Mantenimiento de consistencia entre JavaScript y modelos de objetos C#
Tengo una "clase" de JavaScript que utilizo para almacenar cada uno de los elementos de la lista en el lado del cliente como así como información sobre qué acción ha realizado el usuario en el elemento (agregar, editar, eliminar, mover). La única vez que se publica la página en el servidor es cuando el usuario finaliza, justo antes de enviar la página serializo toda la información sobre los cambios que se hicieron en JSON y la guardo en campos ocultos en la página.
Lo que estoy buscando es un consejo general sobre cómo desarrollar mis clases en C#. Creo que sería bueno tener una clase en C# que coincida con la de JavaScript, así que puedo deserealizar el JSON en instancias de esta clase. Sin embargo, parece un poco extraño tener clases en el servidor que dupliquen directamente las clases de JavaScript y que solo existan para admitir la implementación de la IU de JavaScript.
Esto es una especie de pregunta abstracta. Solo estoy buscando alguna guía de otros que hayan hecho cosas similares en términos de mantener modelos de objetos del lado del servidor y el servidor que coincidan.
Gracias, parece una idea interesante utilizar RelaxNG. He estado haciendo algunas cosas con Google Protocol Buffers recientemente, que usa su propio lenguaje para definir una clase como esa para que luego puedas generar las versiones apropiadas para cualquier idioma en el que estés codificando. Es interesante cómo se puede aplicar una idea como esta. en múltiples escenarios y tecnologías diferentes. No puedo creer que no haya pensado en hacer esto antes. –
ya, pensé en protobufs también. Me pregunto si el código generado que sale de un .idl de protobufs se puede utilizar sin el serializador de protobufs. Si es así, podría usar JsonSerializer en .NET, con el código C# que genera la herramienta protobufs. – Cheeso
Así que está sugiriendo que compare una instancia serializada de la clase C# con un documento estático que contenga JSON y que represente mi estructura de datos. Si coinciden, entonces sé que la clase C# es correcta. Luego compararía instancias de la misma clase en JavaScript en el documento JSON y si coinciden, eso verifica que podré intercambiar datos de un cliente a otro sin problemas de serialización y deserialización. –