持久性模式 - 基于规则的观察者

时间:2009-09-24 22:32:13

标签: design-patterns persistence observer-pattern rules

我正在尝试向应用添加功能,用户可以在其中订阅所做的更改:

  • 到另一个实体(由任何用户)
  • 由另一位用户(对任何其他实体)
  • 两者的组合(最后一个是可选的,但使问题更具挑战性)

我想知道如何最好地将这些规则保存到数据库中。

我自然倾向于每个给定的实体(包括用户本身),我添加了一个额外的UserSubscription表/实体(例如,PublisherUserSubscription,BookUserSubscription,UserUserSubscription)

这意味着订阅将持续执行完整性。但是,就我需要的表格数量而言,这似乎很快就会变成气球,如果我以后改变订阅模式,可能会导致设计非常脆弱。 (每个现有的表都需要更新)。

鉴于这是一个相当普遍的现实场景,我预计会有一些模式。任何人都可以建议吗?

1 个答案:

答案 0 :(得分:1)

我讨厌建议实体/属性/值模式,但为什么不能有一个简单的表格,如:

rulename    Observer   ObjectClass  ObjectId
========    ========   ===========  ========

每个场景ObjectToUser / UserToObject有一个表吗?

如果您希望观察某个特定实体,比如一本特定的书,请将对象的主键添加到EAV模式中。

然后,如果您需要检查规则是否被触发,则从表中的“ObjectClass”查询“ObjectId”并触发列出的任何规则。