为了跟踪Page
类的修订,我有一个PageRevision
继承自Page
并添加修订 ID ( Guid RevisionID;
) 的类。
如果可能,我应该如何将现有Page
对象转换为 aPageRevision
并确保调用 PageRevision 构造函数来创建新的修订 ID?
我可以有一个PageRevision(Page page)
构造函数来生成 Guid 并复制所有 Page 属性,但我想自动化它,特别是如果一个Page
类有很多属性(我后来添加了一个,忘记修改复制构造函数)。
预期用途
Page page = new Page(123, "Page Title", "Page Body"); // where 123 is page ID
PageRevision revision = (PageRevision)page;
// now revision.RevisionID should be a new Guid.
Page
,PageRevision
类:
public class Page
{
public int ID { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}
public class PageRevision : Page
{
public Guid RevisionID { get; set; }
public PageRevision()
{
this.RevisionID = Guid.NewGuid();
}
}
根据反馈编辑:
除了现在显而易见的(Horse)Animal;
铸造问题外,Jon Skeet 还建议进行复合修订:
public class PageRevision : Page
{
private readonly Page page;
private readonly Guid id;
public Guid RevisionID { get { return id; } }
public Page Page { get { return page; } }
public PageRevision(Page page)
{
this.id = Guid.NewGuid();
this.page = page;
}
}
但是,这与我的数据模型完全不同,我希望两者尽可能相似。在我的数据库中,该PageRevisions
表具有与该表相同的列Pages
,预计会有一个额外的RevisionID
列。这很容易使用数据库触发器进行版本控制。
- 鉴于这种复合方法,让 a
PageRevisions
存储所有页面数据是否更有意义:a和RevisionID
,而table 只存储 URL和引用table 的 a ?Title
Body
Pages
Slug
RevisionID
PageRevisions