您好我有一个问题,我必须对不同的数据集执行类似的步骤/操作(略有不同)(数据的结构也可能略有不同)。我需要执行几个步骤:连接、验证、根据需要构建错误消息、将数据结构更改为设定的格式并输出结果。
我正在查看模板方法模式,它看起来很适合这个 - 这听起来正确还是有更好的方法来解决这类问题?
我的目标是一种设计,可以轻松地将新数据集添加到系统中而不会破坏任何东西,并且可以更改错误报告等,而不会对系统产生太大影响。
我正在使用 php。
您好我有一个问题,我必须对不同的数据集执行类似的步骤/操作(略有不同)(数据的结构也可能略有不同)。我需要执行几个步骤:连接、验证、根据需要构建错误消息、将数据结构更改为设定的格式并输出结果。
我正在查看模板方法模式,它看起来很适合这个 - 这听起来正确还是有更好的方法来解决这类问题?
我的目标是一种设计,可以轻松地将新数据集添加到系统中而不会破坏任何东西,并且可以更改错误报告等,而不会对系统产生太大影响。
我正在使用 php。
策略方法与模板方法配合得很好。
模板方法指定类的要求。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 中,我发现数组最适合传递复杂的参数。当然,您必须对数组进行验证
模板方法在这里听起来不错,但也要考虑 Strategy 何时使用模板方法 Vs。战略?