【问题标题】:Modelling an entity with a collection property使用集合属性对实体建模
【发布时间】:2015-03-15 13:20:29
【问题描述】:

我想设计一个电影类。现在,一部电影将有许多类型分配给它。前任。电影复仇者有流派:动作,冒险,科幻。现在,我的应用程序维护了一个可以将子集分配给电影的所有类型的列表。

我现有的模型设计有一个包含整个流派列表的电影实体。 Genre 类仅具有一个 IsSelected 属性,以帮助识别已分配给特定电影的流派子集。这提供了一个优势,因为当我设计用户界面来创建新电影时,我会显示所有可用的类型,用户从中选择/检查适用于电影的类型。

public class Movie
{
    public ObservableCollection<Genre> MovieGenres { get; set; }
}

但是,我认为这种方法有一个缺点。假设我有大约 25 个流派列表和大约 500 部电影,那么会创建大约 25 x 500 个流派对象。

你认为这应该避免吗?

有没有更好的方法将流派与电影对象关联起来,这样可以减少创建这么多流派对象的需要并提供相同的 UI 优势?

或者有没有更好的方法来设计我可以通过模型设计来利用的用户界面?

(我没有使用任何ORM工具,以后也不打算使用)

【问题讨论】:

  • 我只会将分配给该电影的流派存储在电影对象上,并具有用于添加新流派的单独功能。例如,考虑用于添加标签的 SE 系统。如果您真的想保持“显示所有流派并选择/取消选择项目”,那么我将拥有所有流派的单个列表,并将选中状态与 selectedMovie.Genres 列表以其他方式同步。 :)

标签: .net wpf observablecollection data-modeling class-design


【解决方案1】:

对于像你这样的问题,你的方法当然不是推荐的。

通常,我们会在Movie 类中定义一个多值引用属性genres,并且该属性将只保存分配给特定电影的类型。

请注意,在逻辑/概念上,您处理 MovieMovieGenre 之间的单向关联,将类型分配给电影。

【讨论】:

  • 您回答的第一部分似乎很有说服力。但是,枚举类型会使它成为一个固定列表。全局流派列表可以由用户管理扩大或缩小。无论如何,我想我会想办法的。我现在主要关心的是如何对 UI 进行编程,以使用分配给相应电影的类型子集。谢谢。
  • 好吧,你是对的,如果流派列​​表不是(几乎)固定的,那么你不能使用枚举,但需要另一个类。我将编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多