本例如何提取业务逻辑
How to extract business logic in this example
以下方法根据订单状态过滤数据集合。我想知道提取有关订单状态的业务逻辑的最佳方法是什么。例如,假设订单状态要更改,即 ('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;
}
}
我是 C# 开发人员,所以我不会为您提供代码。但在您的情况下,根据具体更改的内容,两种模式中的一种可能会有用。
封装行为使用策略模式。只需使用 extract() 方法附加 Strategy 对象,并在不同状态下替换该对象。 extract() 方法应提供不同的操作(更改状态行等)。
要更优雅地更改订单状态 - 使用 State 模式。它使用具有所有必要数据的上下文对象来读取和更改。此上下文与订阅者共享。例如,您可以将您的订单放在上下文中,并针对不同的状态对象更改此上下文=>订单状态行和其他内容。然后您可以通知订阅者状态已更改并且 return 他们的上下文。
这只是想法,不要按原样使用模式,而是查看其中的主要思想并适应您的需求。祝你好运!
以下方法根据订单状态过滤数据集合。我想知道提取有关订单状态的业务逻辑的最佳方法是什么。例如,假设订单状态要更改,即 ('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;
}
}
我是 C# 开发人员,所以我不会为您提供代码。但在您的情况下,根据具体更改的内容,两种模式中的一种可能会有用。
封装行为使用策略模式。只需使用 extract() 方法附加 Strategy 对象,并在不同状态下替换该对象。 extract() 方法应提供不同的操作(更改状态行等)。
要更优雅地更改订单状态 - 使用 State 模式。它使用具有所有必要数据的上下文对象来读取和更改。此上下文与订阅者共享。例如,您可以将您的订单放在上下文中,并针对不同的状态对象更改此上下文=>订单状态行和其他内容。然后您可以通知订阅者状态已更改并且 return 他们的上下文。
这只是想法,不要按原样使用模式,而是查看其中的主要思想并适应您的需求。祝你好运!