One way to design Message model

在一般的企业级应用中,Message是一个很常见的应用,其主要目的是可以让系统内的用户(包括系统用户)可以交流(包括attachment)。

如何去设计一个Message  BE(Business Model)模型?

首先会想到一种简单的做法:

class Message
	attr_accessor(:subject, :content, :readDate,:sender,:isReaded,:recipients,:attachments)
end

这种做法的好处就是简单明了,将所有信息全部都放在了Message 上,检索数据的SQL语句也会写的比较简单。但是这样的设计在系统使用一段时间就会发现系统的performance越来越差!究其原因,是因为每条Message在发出去时都会复制给所有的recipients,造成Message entity膨胀过快,导致performance 降低。

那我们改进的方法就是要避免message的过度增长,分析上面的模型,我们发现如果将isReaded、readDate和recipients抽成一个新entity,似乎就可以避免Message的复制。如下图示:

其中Recipient 中存储消息的接收人,这样在s1发送一条消息M发给r1,r2.r3时,只会产生如下Entity:

 One Sender,

 One Message,

Three Recipient

(其他entity可以暂时忽略掉)

如果sender或者recipient 要删除自己的message时,只需要将自身相应的IsDeleted设置为true即可(想想为什么不能直接删除entity?:)

模型的主要设计思路到此为止。

关于当前项目中出现的一些特殊需求,比如:

Kayla给自己的tax contact发的消息应该自动被kayla所属client的所有tax contacts共享。

这个其实只需要在发送邮件时自动bcc给其他tax contacts 就OK了。

Posted by Leo 2011年5月15日 03:50