猿问

在继承的类中处理不同类型的更好方法

我正在使用 N 个提供商发送 SMS 消息的 Web 服务。每个提供者在自己的 Web 服务中接收不同格式的消息。


为了在我的 Web 服务中创建模式,我创建了一个抽象类,其中包含要为每个提供程序实现的许多方法。


一些方法需要接收一个可以是不同类型的对象,这取决于继承它的子类(提供者)。这些方法之一返回可以是至少两种不同类型的对象。


我使用“object”关键字实现了这一点,它允许我传递或返回任何对象:


public abstract class Provider {

    protected HttpClient _Client;

    protected SMSManagerAPIContext _Context;


    public abstract DeliveryResponse SendSMS(object Sms);

    protected abstract DeliveryResponse ParseResponse(HttpResponseMessage Response);

    public abstract object PrepareMessage(SMS Sms);

    protected abstract void SaveResponse(object Sms, HttpResponseMessage Response);

}

方法中Sms接收到的对象是SendSMS方法的返回PrepareMessage。问题是PrepareMessage可能返回不同类型的对象。


(例如,我的一个提供者接受发送一条消息或多条消息的请求,但每个消息的对象都不同。然后我在PrepareMessage方法中返回正确的对象,该SendSMS方法将其作为 JSON 对象发送给提供者。 )


富国沪深
浏览 178回答 2
2回答

慕斯709654

使用工厂。使用它的代码可能只关心向某个电话号码提供字符串消息,并返回是否成功以及如果不成功则可能返回错误消息。创建消息本身以遵循不同的提供者/实现应该只是在一个黑匣子中。不同的提供者只会有不同的构造函数。public interface ISmsProvider {    (bool, string) SendMessage(string number, string message);}public class SampleSmsProvider1 : ISmsProvider{    public SampleSmsProvider1(string userKey, string passKey)     {        // initialize               }    public (bool, string) SendMessage(string number, string message)     {        // send the message (using a provider implementation from NuGet perhaps)        // return success/fail and error message, if applicable        return (true, string.Empty);    }}public class SmsFactory{    public ISmsProvider GetProvider()     {        // Initialize and return one of the ISmsProvider implementations, depending on (I guess) the configuration    }}
随时随地看视频慕课网APP
我要回答