我正在寻找在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语句,代码看起来非常复杂和难以理解。
答案 0 :(得分:0)
检查https://github.com/speckcommerce
他们有许多涵盖不同电子商务方面的模块。