以下方法根据订单状态过滤数据收集。我想知道什么是提取关于订单状态的业务逻辑的最佳方法。例如,假设订单状态是改变线,即('in_transit','at_courier')然后这个方法,相关的测试都需要修改:
interface extractor {
public function extract();
}
class ShippedOrderExtractor implements extractor {
public function extract()
{
$dataCollection = $this->source->filter(
array(
'state_one' => 'shipped',
'state_two' => 'with_courier'
)
);
return $dataCollection;
}
}
答案 0 :(得分:0)
我是c#开发人员,所以我不会为你提供代码。但在你的情况下,2种模式中的一种可能很有用,具体取决于具体的变化。
要封装行为,请使用策略模式。只需使用extract()方法附加Strategy对象,并将该对象替换为不同的状态。 extract()方法应该提供不同的操作(更改状态行等)。
要更优雅地更改订单状态,请使用状态模式。它使用上下文对象来读取和更改所有基本数据。此上下文与订阅者共享。例如,您可以在上下文中输入您的订单,并为不同的状态对象更改此上下文=>订单状态行和其他内容。然后,您可以通知订阅者状态已更改并返回其上下文。
这只是想法,不要按原样使用模式,而是要看其中的主要想法并适应您的需求。祝你好运!