为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
富国沪深 2021-10-24 19:42:06
我正在使用 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 对象发送给提供者。 )
查看完整描述

2 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

使用工厂。使用它的代码可能只关心向某个电话号码提供字符串消息,并返回是否成功以及如果不成功则可能返回错误消息。


创建消息本身以遵循不同的提供者/实现应该只是在一个黑匣子中。不同的提供者只会有不同的构造函数。


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

    }

}


查看完整回答
反对 回复 2021-10-24
  • 2 回答
  • 0 关注
  • 177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信