4.2 域描述

4.2.1 博客系统

这里我们使用博客系统作为示例域,并且使用一些模型来描述它。博文仅仅是博客系统的一部分。除了博文,博客系统还有博客作者、博文评论、博文标签和博文归总数据。通俗地说,域由以下实体和关系构成:

Authors

每位博客作者可以创建一篇或多篇博文。

Blogs

每篇博文由一位主要作者发布。每篇博文可以有多条评论。每篇博文可以关联一个或多个标签。每篇博文还有归总数据:关于博文的评论数、访问量等等,这些和博文内容身是独立的。

Comments

每条评论仅属于一篇博文。

Tags

每个标签都会关联一篇或多篇博文。

Summaries

每份归总数据仅属于一篇博文。

4.2.2 术语

使用Solar术语,我们可以更专业地描述域:

  • An Author "has many" Blogs。这是“一对多”关系。

  • A Blog entry "belongs to" an Author。这是“一对一”关系。

  • A Blog entry "has many" Comments。这是“一对多”关系。

  • A Blog entry "has many" Tags 和它关联, 同时也“属于”那些标签。这是“多对多”关系。

  • A Blog entry "has one" Summary line。这是“一对一”关系。

  • A Comment "belongs to" a Blog entry。这是“一对一”关系。

  • A Tag "has many" Blog entries 和它关联, 同时某些时候也“属于”那些博文。这是“多对多”关系。

基于这种描述,在上例中,我们发现Solar能识别的四种关系:

  • 占优一对一关系(hasOne及其变种hasOneOrNull);

  • 占优一对多关系(hasMany);

  • 从属(相互的)一对一和多对一关系(belongsTo);

  • 多对多关系。

这里的多对多关系在某些系统中被称为“has and belongs to many”。在Solar中,因为AssociationTableMapping模型的需要,我们称这种关系为hasManyThrough。我们把BlogsTags的相互关系称为Taggings关联模型。

4.2.3 域图

下面是博客域的图形表,使用上面的术语描述了它们之间的关系。