您的PayPay
和Google
类是否代表描述付款所需的数据?通常,支付类应该代表支付。如果该类的工作是处理付款,它可能应该有一个类似的名称PaymentProcessor
,并且它的接口类似IPaymentProcessor
(或者实际上IPaymentService
,或类似的东西)。
如果支付类代表实际支付,那么该类的方法不需要任何参数MakePayment()
;相反,它将依赖实例数据来描述正在支付的款项。
或者,你可以有这样的东西(仍然Payment
用来描述付款本身):
interface IPaymentProcessor<T> where T : IPayment
{
void ProcessPayment(T payment);
}
class PayPayPaymentProcessor : IPaymentProcessor<PayPay>
{
void ProcessPayment(PayPay payment) { /* some implementation here */ }
}
class PayPayPaymentProcessor : IPaymentProcessor<Google>
{
void ProcessPayment(Google payment) { /* some implementation here */ }
}
我可能会命名类PayPayPayment
,GooglePayment
因此名称更清楚地代表了类型:
class PayPayPaymentProcessor : IPaymentProcessor<PayPayPayment>
{
void ProcessPayment(PayPayPayment payment) { /* some implementation here */ }
}
class PayPayPaymentProcessor : IPaymentProcessor<GooglePayment>
{
void ProcessPayment(GooglePayment payment) { /* some implementation here */ }
}
请注意,这与其他建议的使用类的方法非常相似PaymentParameters
,但它更接近于单一职责原则。在 Brian Cauthon 的回答中,PaymentParameters
该类必须为任何类型的付款保留所有可能参数的并集;在这里,参数类型可以(并且应该)特定于它们所代表的支付需求。