java - Java 中 'event' 驱动的内容通知服务的设计模式是什么?

标签 java design-patterns notifications content-management-system

我正在设计一个内容管理系统。目前我正在处理文档

public Enum DocAction(){
    DOCUMENTSUBMITTED,
    DOCUMENTAPPROVED,
    DOCUMENTREJECTED
}

public Enum NotificationType(){
    EMAIL,
    TEXT,
    POPUP
}

public class Newspaper(){
    private long                id;
    private map<DocAction,long> notifications;
    private long                EditorId
}

Public class Document(){
    private long      id;
    private long      newspaperId;
    private long      authorId
    private String    article
}

Public class Notification(){
    private long     id
    private map<NotificationType,long>     notifications
}

类(class)的大致轮廓如上。

我希望针对某些操作(提交、批准、拒绝文件等)发送通知,具体取决于提交给哪家报纸。

然后我可以进入相应的方法,例如“saveDocument”,检查 key 是否存在,如果存在,则将其映射到的通知发送给编辑/作者。

我认为枚举是一个很好的计划,因为可以添加或删除尽可能多的内容,而且并非所有报纸都想使用所有内容。然而我被告知这是一个糟糕的设计,因为电子数字很难管理,并且需要通过重新部署等进行大量维护。

我想知道是否有更适合这种设计的设计模式。

我认为的替代方案只是每次调用一个方法,并使用 freemarker 来确定是否应该发送电子邮件。

主要特点:

  • 报纸有通知(可能有多种类型)
  • 某些操作需要向编辑 ID 或作者 ID 发送通知
  • 每份报纸的 Activity 数量会有所不同。

感谢您的帮助。

最佳答案

听起来像是 Observer Pattern 的一个明确的案例。 ,其中报纸文档将是主题,而您的通知将是观察者

如果不能避免使用枚举,因为它们非常适合区分通知类型以及文档操作。除了添加新通知或媒体类型的其他代码更改所需的部署之外,我看不出他们如何需要额外的重新部署。

不过,如果需要在不重新启动服务器的情况下重新配置通知、文档操作和媒体类型之间的映射,您可以实现某种基于数据库或配置文件的映射。

关于java - Java 中 'event' 驱动的内容通知服务的设计模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28274766/

相关文章:

java - 循环访问条目集合时的性能

c++ - 在两个 vector 中的元素之间创建链接

model-view-controller - 如何避免将依赖项注入(inject)对象以便它可以传递它们?

java - Activity 关闭时不显示通知

ios - 闹钟锁屏通知

java - 如何在Java中获取 "last saved by"Office文件属性

java - 标记无法使用 JUnit5 在 IntelliJ 中运行测试

java - 如何以编程方式获取 Apache 项目上托管的项目的详细信息(我们有 API)吗?

java - 寻找 OSGi 设计模式

java - 通知打开一个新窗口,无论在 Java Android 中是什么