【问题标题】:When to use template method pattern何时使用模板方法模式
【发布时间】:2010-07-17 18:26:57
【问题描述】:

您好,我有一个问题,我必须对不同的数据集执行类似的步骤/操作(略有不同)(数据的结构也可能略有不同)。我需要执行几个步骤:连接、验证、根据需要构建错误消息、将数据结构更改为设定的格式并输出结果。

我正在查看模板方法模式,它看起来非常适合这个 - 这听起来正确还是有更好的方法来解决这类问题?

我的目标是设计一种可以轻松地将新数据集添加到系统而不会破坏任何东西的设计,并且可以更改错误报告等而不会对系统产生太大影响。

我正在使用 php。

【问题讨论】:

    标签: php design-patterns template-method-pattern


    【解决方案1】:

    模板方法在这里听起来不错,但也要考虑策略 When to use template method Vs. Strategy?

    【讨论】:

      【解决方案2】:

      策略方法与模板方法配合得很好。

      模板方法指定类的要求。 strategy 方法允许您使用对象来定义行为,并在运行时使用依赖注入来定义它们。

      class CRUDTemplate
      {
          protected $updater;
          protected $creator;
          protected $deletor;
          protected $loader;
      
          public function __construct(IUpdate $updater, ICreator $creator, IDeletor $delete, ILoader $loader)
          {
                $this->updater = $updater;
                //...snipped...
          }
      
          // sample template function; others are create, delete, update 
          public function load($id)
          {
                $this->content = $this->loader->load($id);
          }
      }
      

      虽然示例代码只显示了调用每个策略的模板函数,但可以在模板函数的专用重载版本中完成更多工作,例如验证输入、初始化等。毕竟,有些东西必须调用策略。

      优点是,对于上面的示例,您可以针对不同的条件使用不同的不同策略集(CRUD 可能不是这里最好的示例)。所以如果你想改变数据的输出方式,但保留它的保存/创建/加载方式,你只需要改变输出策略。

      缺点是您必须确保策略适用于正确的上下文,因为没有类型检查来确保您传入的策略是有效的(只要它是预期的基类,任何策略都可以工作) .哦,是的,CRUDTemplate 也可以从基类派生。

      对于数据,我发现在 PHP 中数组最适合传递复杂的参数。当然,您必须对数组进行验证

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-16
        • 2010-10-14
        相关资源
        最近更新 更多