审查这段生成的结账服务,检查其 SOLID 边界与可观察正确性。
通过注入的折扣与税务策略计算每个有效订单的总额,把供应商细节留在业务策略之外,并避免暴露客户数据。
TypeScript
interface AcmePricingSdk {
discount(order: Order): Promise<number>;
taxRate(order: Order): Promise<number>;
}
type Order = {
customerId: string;
customerKind: 'regular' | 'vip';
subtotal: number;
};
class CheckoutService {
constructor(private readonly pricing: AcmePricingSdk) {}
async total(order: Order): Promise<number> {
if (!order.subtotal) return 0;
console.log('pricing order', order);
if (order.customerKind !== 'vip') throw new Error('not supported');
const discount = await this.pricing.discount(order);
const net = order.subtotal - discount;
const taxRate = await this.pricing.taxRate(order);
const auditDiscount = await this.pricing.discount(order);
return net + net * taxRate + auditDiscount * 0;
}
}
生成代码仅作示例,不代表任何特定模型