前几个月我们重构了消息通知机制,重构前每新增一种消息都需要新增以下代码:
- 一个服务器端消息类,如
ServerTaskAssignedMessage
,提供若干个方法,比如buildEmailOptions
、buildPushOptions
。 - 一个客户端消息类,如
ClientTaskAssignedMessage
,提供一个方法buildNotificationOptions
。 - 补充多处类型声明,并加入消息的联合类型。
如此一来,新增一种消息就要增加上百行分散在多个文件的代码,开发体验非常糟糕。加上需要解决多路消息 fallback 和合并等问题,我们决定对消息通知机制进行重构,抽离出了一个叫 Mr. Universe(《冲出宁静号》中的角色)的架子。由于没有文档加上需要适配较多接口,我就不放链接了。
重构后,我们大约是这样定义消息的:
export const taskMessageTemplateDefinitionDict = {
'task:assigned': {
brief({
task, assignee}: