代码之家  ›  专栏  ›  技术社区  ›  Francisco Noriega

如何首先使用代码设计具有用户可编辑/可版本化内容的数据库?

  •  0
  • Francisco Noriega  · 技术社区  · 14 年前

    我正在开发一个用户将能够添加和修改现有内容的网页,它不是一个维基,而是一种类似于SO的编辑能力。

    我正在使用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;}
       ...
    }
    

    但我不太相信。。因为我也将有标签,删除/取消删除帖子的能力,回滚等。你知道如何正确设计类,帮助我正确版本的内容?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Robert Koritnik    14 年前

    追求简单

    你需要问自己的主要问题是 你是要一直显示所有版本,还是大部分时间都显示最新版本,并根据要求显示所有版本? 类似于这里。大多数时候你只看到最新的版本。

    如果这和我们的案子一样,我不会太在意这些版本。但是,当你想在一个页面类上显示它们时,设计或多或少取决于你想显示的方式。是不是会有变化之类的。

    我宁愿上这样的课:

    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 . 我添加了标记列表,但没有添加与问题状态相关的任何其他进程相关属性。这在很大程度上取决于处理顺序。