Как спроектировать базу данных с помощью пользователя с редактируемым / версийным контентом, используя код сначала?

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

Вопрос

Я разработаю страницу, в которой пользователи смогут добавлять и изменять существующий контент, его не вики на SÉ, а вроде, как и редактирование способностей.

Я работаю с EF4 и новым кодом первым подходом в последнем CTP, так что на это был бы лучший дизайн класса для этого?

Мое текущее предположение - это то вроде этого:

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

   public virtual User User{ get; set; }  
}

а затем используйте его в моих других лицах, в таком контексте это может быть что-то вроде этого

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

Но я не совсем не убежден .. Так как у меня также есть теги, возможность удаления / недостаточных сообщений, откат и т. Д. Вы знаете, как правильно разработать классы, которые помогут мне правильно версию контента?

Это было полезно?

Решение

Цель для простоты

Главный вопрос, который вам нужно спросить себя Вы собираетесь показать все версии все время или последнюю версию большую часть времени, и все они по запросу? Похоже на здесь. Большую часть времени вы видите только последнюю версию.

Если это то же самое с нашим случай, я бы не так много заботился об этих версиях. Но когда вы хотите показать их все на одной конструкции класса страницы, более или менее зависит от того, как вы хотите показать это. Это будет отображать изменения и такие вещи.

Я бы предпочел иметь класс, как:

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

И когда я поставил всех из них, я просто вернул список их заказа LastChange. Отказ Я добавил список тегов, но я не добавил ни одного из других свойств, связанных с процессом, связанным с государством вопроса. Это безусловно зависит от последовательности процесса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top