恭喜你,你的【会员】成功升级到了【13级】由于你已经多次违反网站规定,现已经被封号【3个月】3.管理员发送
1.站内信的主语:某某某用户、系统、管理员,当然也可以不展示,不展示的一般就是系统。为了后文讨论方便,我们称之为主语。该变量是为了告知接受者是谁触发了通知。
站内信的内容模型可以用伪代码展示如下:
有时候用户对某种事件的站内信并不感兴趣,甚至讨厌。那站内信就要提供设置让用户有选择的接受站内信,当然了,系统的站内信肯定得必须接收。以下是知乎站内信设置的一部分:
本文的站内信内容模型中只需要以event和sonEntityType为维度设置是否接收消息、接收哪些人的消息,就能比较容易的实现消息通知的设置。
说了那么多,我想把自己的一些设计思路特别是站内信的生成、保存和获取功能展示在这里。给需要者一个参考:
站内信表:tbl_website_message,包含的字段大致如下:
站内信与用户关系表:tbl_user_message,包含的字段大致如下:
用户在登陆网站或者打开app的时候触发查询,从用户站内信表(tbl_user_message关联tbl_website_message)读取站内信list,比较简单。但有一点需要注意:如果是一对多的场景,即一个事件触发多人接收通知。并不需要将所有人需要接受站内通知放入tbl_user_message表,需要被通知的人在登陆获取站内信的时候按需去tbl_website_message中查询并出入到tbl_user_message。具体流程如下:
1.获取tbl_user_message中跟自己有关的最大max_message_id。2.去tbl_website_message中获取>max_message_id的所有记录。3.循环遍历判断记录是否与自己有关(根据业务逻辑,如果有关将关联关系插入到tbl_user_message即可(记得id也要保存到max_message_id字段中。4.更新最晚插入tbl_user_message那条记录中的max_message_id为新遍历的最大的website_message表id。防止下次重复遍历。一些问题站内信关联实体内容的动态获取前面设计的站内信内容模型保存的是关联实体的对象,在生成站内信内容的时候从模型中将关联的实体信息(例如标题)填充进去。如果在这之后关联实体的信息(如标题)发生改变,在消息中并不能体现出来。如果要动态获取关联内容也很简单,在模型中保存关联实体的id就可以了,在用户获取站内信的时候再去根据id获取关联实体内容组装成内容返回即可。动态获取关联实体内容可以保证实时性,但我觉得,非动态获取关联实体内容会更好,理由有四: