数据库+数据模型设计模式

时间:2012-07-03 02:52:02

标签: database ruby-on-rails-3 design-patterns

我正在为我们公司设计一个通知系统,用户可以在其中指定是否要发送不同操作的通知。

我想知道这个Design Patter的名称是什么,所以我可以阅读它并按照do和dont的说法进行操作。

故事(要求):当用户对我们的网站(应用程序)采取不同的操作时,操作会发布到他们的Facebook和Twitter帐户,我们也会通过电子邮件发送给他。有很多行动,Facebook下6个,Twitter下6个,电子邮件12个。因此,为每个动作创建一个单独的列是没有意义的,特别是它们的值默认为true。

因此,例如,当用户将新图像上传到我们网站上的页面时,我们希望将其发布到他们的Facebook和Twitter,他们只是将图像上传到我们的应用程序。

我对此的设计是带有这些列的meta_data表(带有示例行):

id, user_id, namespace,  notification,   value 
0,  1,       'facebook', 'image_upload', false
1,  1,       'twitter',  'video_post',   false
2,  10,      'email',    'send_money',   false

对于所有操作及其命名空间我在创建表时默认向数据库添加一些行,其中我将所有值设置为true。 然后在用户设置页面中,他可以看到这些设置的复选框,默认情况下都会检查这些设置。 每次用户创建取消选中一个,然后我为该用户,操作和命名空间创建一个新行,其值为false。

2 个答案:

答案 0 :(得分:1)

这称为Observer pattern

答案 1 :(得分:0)

我更像是Publish-subscribe pattern,但我怀疑这对你有帮助。

关于数据模型: 我用3张桌子。由于EventDefinition和ActionDefinition应该非常小,所以你应该总是将它们放在内存中。

EventDefinition id名称 0'在您的应用中做了一些事情' 1'其他东西' ...

ActionDefinition id名称 0'upload_image_tofacebook' 1'send_email' 2 ...

您必须拥有某种“上下文”,其中事件设置了一些数据或变量,并且响应中执行的操作可以从中读取。

订阅 user_id event_id action_id 0 2 3 //当事件id 2发生与user_id相关时0执行操作3