2012-03-06 9 views
8

He hecho un poco de trabajo con mongoDB en C# pero todo mi código aún está en desarrollo. Me pregunto qué patrones útiles las personas han encontrado en la evolución de sus clases de dominio a lo largo del tiempo a medida que se crean, modifican y eliminan nuevas propiedades. Tengo claro que tendré que ejecutar actualizaciones sobre todos mis datos almacenados o asegurarme de que mis clases de dominio sepan cómo manejar los registros de formato más antiguos, pero con el tiempo podría imaginar que esto se vuelva caótico si una clase tiene que saber cómo lidiar con todos los formatos de formulario posibles.¿Hay algún patrón general para diseñar clases para bases de datos sin esquema en .NET?

¿Estoy pensando en esto? ¿Se trata más que nada de utilizar una buena programación defensiva?

+0

Asunto bastante nuevo, buena pregunta ... pero probablemente pertenece a programmers.stackexchange.com porque es más conceptual en naturaleza que un "problema" normal para resolver. – NotMe

Respuesta

2
  1. Agregar nuevas propiedades a sus objetos de datos no puede ser más fácil. Usted solo agréguelos. A menos que se preocupe porque estas propiedades sean nulas para el objeto que existen en la base de datos, no tiene que hacer nada . Si algunos usuarios/máquinas usan la versión anterior de su aplicación y sus clases fueron marcadas con BsonIgnoreExtraElementsAttribute, es posible que ni siquiera necesiten actualizar su software.
  2. Eliminar propiedades obsoletas no puede ser más fácil. Usted simplemente elimínelos en sus clases. Si sus clases están marcadas con BsonIgnoreExtraElementsAttribute, entonces ni siquiera tiene que eliminar en su base de datos (en caso de que, por ejemplo, sus usuarios tengan varias versiones de su aplicación).
  3. Cambiar el nombre de las propiedades de la clase también es fácil. El constructor BsonElementAttribute tiene un parámetro, por lo que puede asignarlo al nombre de propiedad correcto en la base de datos.
  4. Cambiar el tipo de propiedad puede requerir que ejecute una actualización en sus datos de . Pero, en serio, ¿con qué frecuencia cambia el tipo de propiedad de cadena a int en producción?

Por lo tanto, en muchos casos ni siquiera necesitará ejecutar actualizaciones en sus datos (a menos que cambie el tipo de datos o su propiedad afecte el índice). Otro punto es que agregar BsonIgnoreExtraElementsAttribute suele ser una buena práctica, especialmente si le preocupan las propiedades que se agregan o eliminan con frecuencia. Siguiendo esta práctica, puede proporcionar versiones anteriores y posteriores de su aplicación para trabajar con todas las versiones de registros, disfrutando de los beneficios de la "ausencia de esquemas".

+0

Estaba pensando en la misma línea, pero estaba preocupado de que no podría ser tan fácil. Me alegra oír que parece ser. –

Cuestiones relacionadas