ZF2组织结账流程的最佳方式

时间:2017-02-15 15:52:55

标签: php design-patterns zend-framework2 checkout

我正在寻找在zf2中组织订购/结帐流程的最佳方式。

哪种模式最适合此目的? 目前我只有带有服务的Order模块,它处理包含在事务中的主::order()方法中的顺序,如下所示:

// Simplified, somewhere wrapped in transaction
public function order($data)
{
    // Get Order model
    $orderModel = $orm->get('Model\Order');
    // Create order entity
    $order = new Order();

    if (!$orderModel->validate($data)) {
        // Show error fields there
        throw new Exception('Order validation failed');
    }

    // Form order items from products
    if (!empty($data['products'])) {
        foreach ($data['products'] as $product) {
            $orderItem = new OrderItem();
            $orderItem = $orderModel->patch($product);
            $orderModel->save($orderItem);
            $order->addOrderItem($orderItem);
        }
    }

    if (!empty($data['card_id'])) {
        // Process payment transaction
        $this->paymentService->createTransactionByCardId($data['card_id']);
    }

    // Calculate totals, select shipping and etc. in the same manner ...

}

因此,Order模块只包含用于保存/更新实体的模型(Model \ Order),实体(Entity \ Order)和用于处理订单/结账的服务(Service \ Order)。

我认为这是一个好主意,还是应该根据某种模式(可能是策略或类似的东西)将排序过程分开并使其更抽象?上面的代码看起来很清楚,但实际上有很多if-else-throw语句,代码看起来非常复杂和难以理解。

1 个答案:

答案 0 :(得分:0)

检查https://github.com/speckcommerce他们有许多涵盖不同电子商务方面的模块。