以下是几种模式:
如果您有时间,我最喜欢的方法是将上述两种方法变得动态化,这样您只需要插入实现接口的插件,框架就会自动选择并调用它。例如,请参见NServiceBus或Rebus中的消息处理。这些框架接收类型为IMessage的传入消息,并自动将其提供给消息处理程序。公共接口如下:
public interface IMessageHandler<T> where T : IMessage
{
void Handle(T message);
}
很不幸,我自己不得不多次实现这个功能,而不能使用框架,因为我没有被允许使用它。
你采取的方法取决于你正在处理什么 - 它会经常更改吗,只是原型或POC等。
绝对要避免一个具有不会被所有人使用的方法的大接口。
根据您的评论添加一些更多信息,它看起来像这样:
public interface IPaymentProcessor<T> where T : IPaymentInfo
{
void ProcessPayment(T paymentInfo);
}
public class CreditCardPaymentInfo : IPaymentInfo
{
public CardInfo CardInfo { get; set; }
}
public class CreditCardPaymentProcessor : IPaymentProcessor<CreditCardPaymentInfo>
{
public void ProcessPayment(CreditCardPaymentInfo paymentInfo)
{
}
}
然后在您的代码中,付款正在进入,因此它会调用以下方法:
public void ProcessCardSwipe(CardData cardData)
{
var cardInfo = new CreditCardPaymentInfo { CardInfo = cardData };
ProcessPaymentInfo(cardInfo);
}
public void ProcessPaymentInfo(IPaymentInfo paymentInfo)
{
if (paymentInfo is CreditCardPaymentInfo)
{
new CreditCardPaymentProcessor().Process((CreditCardPaymentInfo)paymentInfo);
}
}