17

我正在为业务线应用程序构建邮件模块。情况是,在发送邮件以响应某些输入时,它们应该被分组,这样用户就不会收到几封包含不同项目的连续邮件,而只会收到一封包含所有项目的邮件。此外,邮件应按特定类型分组,这取决于创建邮件通知的输入类型,我有输入列表,每个输入都有其特定的分组类型,例如:

层次结构:员工流程请求活动

活动 1: 由员工(因此接收者将在一封邮件中收到他拥有的此活动类型的所有流程的通知)

活动 2: 按进程(接收者将获得一组关于此进程的所有请求的所有通知,以及此活动类型)

活动 3: 按请求(此请求的活动将被分组)

活动 4: 按活动(每个活动将在单独的邮件中发送)

这种分组会不断变化。

您可能会想,为了做到这一点,应该立即进行输入,以便同时生成邮件并进行分组,否则系统如何知道何时等待其他输入以及何时只发送单独的邮件? . 答案是两者都有,所以我正在做的是设置一个计时器,以便邮件服务每 5 分钟运行一次,一些即时邮件可能会延迟几分钟,但这是一个负担得起的权衡。

所以我选择使用这种责任链设计模式,结构如下:

邮件分组结构

所以我有两个接口IGroupingType,它定义了每种类型应该如何,并且有 2 个方法:CalculateGrouping(): 确定这是否是活动的分组。GroupEmailsToSend():如果这是分组,则获取邮件列表。

接口IGroupingHandler是调用每个分组类型的服务类,GetGroupingResult()只是调用IGroupingType具体实现上的 2 个方法,首先CalculateGrouping()获得正确的分组,当它找到时,调用GroupEmailsToSend(). 该接口还为每个分组注册链中的下一个节点。

分组枚举只是为了返回分组计算的结果。

然后还有EndOfChainSendingGrouping类,如果没有找到分组,我会立即发送邮件。

基本上我只需要一些关于这种结构的建议,因为我对这种模式有点陌生,它有什么陷阱吗?有什么我可以改进的吗?还是有更好的方法来做到这一点?

提前致谢..

4

1 回答 1

4

我认为链接听起来不错,似乎最适合这里。最终,装饰器模式可用于过滤接收者列表。

于 2012-10-03T16:54:13.650 回答