Comment concevoir la base de données avec éditable utilisateur / contenu versionnable en utilisant le code d'abord?

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

Question

Je un développement d'une page où les utilisateurs pourront ajouter et modifier le contenu existant, ne est pas un wiki en soi, mais en quelque sorte, comme les capacités d'édition de SO.

Je travaille avec EF4 et le nouveau code Première approche dans la dernière CTP, donc ce serait la meilleure conception de classe pour cela?

Je pense actuel est quelque chose comme ceci:

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

   public virtual User User{ get; set; }  
}

et puis l'utiliser dans mes autres entités, dans un contexte de sorte qu'il pourrait être quelque chose comme ça

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

Mais je ne suis pas vraiment par elle .. car je convaincu vais aussi avoir des balises, la capacité à supprimer / messages Undelete, rollback, etc. Savez-vous comment concevoir correctement les classes qui me aide la version du contenu correctement?

Était-ce utile?

La solution

Viser la simplicité

La principale question que vous devez vous poser est Allez-vous pour afficher toutes les versions tout le temps ou la dernière version la plupart du temps et tous sur demande? Dans le même ici. La plupart du temps vous ne voyez la dernière version.

Si cela est la même chose avec notre cas, je ne se soucie tant de ces versions. Mais quand vous voudriez leur montrer sur une seule conception de classe de page plus ou moins dépend de la façon que vous souhaitez montrer. Est-ce que ça va montrer des changements et des choses comme ça.

Je préfère avoir une classe comme:

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; }
}

Et quand je les afficher tous que je venais de retourner une liste de ces commandés par LastChange. J'ai ajouté la liste des balises mais je ne l'ai pas ajouter l'une des autres propriétés liées aux processus liés à l'état de la question. Cela dépend énormément de la séquence de processus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top