哪种设计模式用于电子邮件退回处理程序?

时间:2013-02-21 10:34:26

标签: php oop design-patterns

我编写了一个电子邮件退回处理程序类(在PHP中),该类最初仅用于解析格式良好的RFC兼容电子邮件退回邮件。然而,随着时间的推移,我不断添加越来越多的方法来处理不合规的反弹消息,你可以说这是反弹的不同“类型”。然后,为了响应客户的请求,我添加了对ARF消息的支持,这是第三种类型的退回。当然,现在有不合规的ARF消息,所以我不得不为它添加一个解析器。

所以,现在该类处理四种反弹类型:

  1. 符合RFC
  2. RFC不合规
  3. 符合ARF
  4. ARF不合规
  5. 有几种类型的消息意味着我必须将“文本嗅探器”放入初始化函数中,该函数调用适当的内部解析函数,整理结果并返回它。这部分很重要,因为需要一个公共方法接收任何电子邮件文本并返回格式化的数组(is_a_bounce = yes / no,is_an_ARF = yes / no,RFC代码,被拒绝的收件人电子邮件地址),如下所示: / p>

    $arrayResult = $bounceHandler->parse($raw_email_text);
    

    问题是,课程凌乱/人满为患,我想将其重构为更正式和正确的OOP设计模式。

    • 您会推荐哪种设计模式?
    • 任何PHP示例或文章/博客?

    提前致谢

1 个答案:

答案 0 :(得分:0)

看起来你实际上是在描述一个抽象如何处理反弹的类,并且有不同的实现来处理不同的反弹。这与Bridge设计模式的描述相符。

基本上你会有一个Abstraction类提供一个接口(在这种情况下是函数解析($ raw_email_text))并决定在它“嗅探”消息之后要使用的Handler实现。

您可以为Handler实现创建一个接口,允许您在需要新功能时扩展可用的替代实现。您还可以确保Abstraction实现相同的接口,允许用户在知道消息类型的情况下使用实现而不是抽象。