如何在此示例中提取业务逻辑

时间:2015-06-15 15:47:02

标签: design-patterns logic structure

以下方法根据订单状态过滤数据收集。我想知道什么是提取关于订单状态的业务逻辑的最佳方法。例如,假设订单状态是改变线,即('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;
    }
}

1 个答案:

答案 0 :(得分:0)

我是c#开发人员,所以我不会为你提供代码。但在你的情况下,2种模式中的一种可能很有用,具体取决于具体的变化。

  1. 要封装行为,请使用策略模式。只需使用extract()方法附加Strategy对象,并将该对象替换为不同的状态。 extract()方法应该提供不同的操作(更改状态行等)。

  2. 要更优雅地更改订单状态,请使用状态模式。它使用上下文对象来读取和更改所有基本数据。此上下文与订阅者共享。例如,您可以在上下文中输入您的订单,并为不同的状态对象更改此上下文=>订单状态行和其他内容。然后,您可以通知订阅者状态已更改并返回其上下文。

  3. 这只是想法,不要按原样使用模式,而是要看其中的主要想法并适应您的需求。祝你好运!