收银台处理许多种不同业务这种适合用什么设计模式?
收银台处理许多种不同业务,这种情况下用什么设计模式比较合适?
举例:
1、零售业务
2、还款业务
3、充值业务
等
每一次收费之后,都需要处理将近10几个表。目前我都是在模型事件里面单独处理。
没有设计模式,代码很乱。
class Cashier extends BaseModel
{
protected $table = 'cashier';
protected $guarded = [];
protected $primaryKey = 'id';
protected $keyType = 'string';
public $incrementing = false;
protected $casts = [
'arrearage' => 'float',
'deposit' => 'float',
'income' => 'float',
'payable' => 'float',
];
public static function boot()
{
parent::boot();
static::saved(function ($cashier) {
// 顾问销售单
if ($cashier->status == 2 && $cashier->cashierable_type == 'App\Models\Consultant') {
self::handleConsultant($cashier);
}
// 医生门诊单收费
if ($cashier->status == 2 && $cashier->cashierable_type == 'App\Models\Outpatient') {
self::handleOutpatient($cashier);
}
// 充值
if ($cashier->status == 2 && $cashier->cashierable_type == 'App\Models\Recharge') {
self::handleCashierRecharge($cashier);
}
// 还款
if ($cashier->status == 2 && $cashier->cashierable_type == 'App\Models\CashierArrearage') {
self::handleRepayment($cashier);
}
// 退款
if ($cashier->status == 2 && $cashier->cashierable_type == 'App\Models\CashierRefund') {
self::handleCashierRefund($cashier);
}
// 零售收费
if ($cashier->status == 2 && $cashier->cashierable_type == 'App\Models\CashierRetail') {
self::handleCashierRetail($cashier);
}
});
}
状态
策略
或者不用都可以。把每个业务都变成一个单独的类,这才是重点。
或者事件 + 状态 更好些。