Cómo diseñar la base de datos con contenido editable por el usuario / versionable utilizando código de Primera?

StackOverflow https://stackoverflow.com/questions/3865904

Pregunta

un desarrollo de una página donde los usuarios podrán añadir y modificar el contenido existente, no es un wiki en sí, sino una especie de, como capacidades de edición de SO.

Estoy trabajando con EF4 y el nuevo Código de Primera aproximación en la última CTP, así que lo que sería el mejor diseño de la clase para esto?

mi suposición actual es algo como esto:

public class VersionableText
{
   public int Id { get; set; }
   public DateTime Date{ get; set; }
   public String Text{ get; set; }

   public virtual User User{ get; set; }  
}

y luego usarlo en mis otras entidades, en un contexto así que podría ser algo como esto

public class Question
{
   public int Id {get; set;}
   public virtual VersionableText Title {get; set;}
   public virtual VersionableText Content{get; set;}
   ...
}

Pero no estoy muy convencido de que .. ya que yo también voy a tener etiquetas, capacidad de eliminar / recuperar, mensajes de reversión, etc. ¿Usted sabe cómo diseñar adecuadamente las clases de esa versión me ayuda el contenido correctamente?

¿Fue útil?

Solución

Objetivo para la simplicidad

La cuestión principal que hay que preguntarse es ¿Usted va a mostrar todas las versiones todo el tiempo o la última versión mayor parte del tiempo y todos ellos bajo petición? Al igual que aquí. La mayoría de las veces sólo se ve la versión más reciente.

Si esto es lo mismo con nuestro caso yo no le importa tanto sobre estas versiones. Pero cuando te gustaría mostrarles todo en un diseño de clase de página más o menos depende de la forma en que desea mostrarlo. ¿Va a estar mostrando cambios y cosas por el estilo.

Yo prefiero tener una clase como:

public class Question
{
    public int Id { get; set; }
    public QuestionStatus Status { get; set; }
}

public class QuestionHistory
{
    public Question Question { get; set; }

    public string Title { get; set; }
    public string Content { get; set; }

    public User Author { get; set; }

    public DateTime Created { get; set; }

    public IList<Tag> Tags { get; set; }
}

Y cuando me muestres todas ellas que acababa de devolver una lista de estos ordenado por LastChange. He añadido la lista de etiquetas pero no añadir cualquiera de las otras propiedades relacionadas con los procesos relacionados con el estado de que se trate. Depende enormemente en la secuencia del proceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top