我正在尝试构建通用通知服务,以便在发生某些事件时向客户端发送不同的通知(电子邮件,短信或移动推送)。此服务将依次调用基于发布者/订阅者事件的系统,类似于:https://sites.google.com/site/jeffhartkopf/notifier。每当某个事件发生时,它就会在SQS上发布,订阅者从中读取它并发送通知。
发布商的API接口:
通知发件人类会:
sendNotification(对象有效负载,Map属性Map)
此处,有效负载包含在电子邮件/短信/推送通知模板的文本中可变的参数。例如:如果电子邮件具有“Hello $ name”,则有效内容对象将具有作为字段的名称,并将值设置为您要将通知发送到的客户端的名称:
@EventType("name"= "Recommendations")
class PayloadObject {
@Getter @Setter
String name;
}
此处,事件类型是自定义注释,用于了解要向其发送通知的事件类型,发送其有效负载对象时应使用哪些客户端。
我在这种方法中看到的问题是,对象有效负载过于通用,根本就没有类型安全性。就像这个服务的客户端可以发送垃圾对象一样,在我的服务中没有任何我能想到的检查来验证这一点。 有没有办法可以针对客户端发送的对象验证模板中的参数(Velocity或XSLT格式)。就像可能使客户端编写单元测试对应每个模板和有效负载对象?或者我可以以更好的方式建模我的API,而不是从客户端获取Object以确保在调用API时类型安全。