【问题标题】:How to pass different parameters to different http request classes that implement the same interface如何将不同的参数传递给实现相同接口的不同http请求类
【发布时间】:2015-05-07 16:32:27
【问题描述】:

我正在开发一个 C# 程序,它必须执行各种 HTTP 请求以获取不同类型的信息(区域中特定商品的价格、商品价格历史记录、两个区域之间的路线等)。

我首先实现了一个 IRequest 接口,该接口包含所有请求都必须具有的两个属性:

public interface IRequest
{
    ReturnDataType DataReturnType { get; }

    HttpWebRequest HttpRequest { get; }
}

public enum ReturnDataType
{
    Xml,
    Json
};

我想在该接口中添加一个列表(或任何其他容器),其中包含请求的参数(将添加到 URL 中),以便我可以通过引用 IRequest 接口来访问它们。不幸的是,由于每个http请求不一定有相同的请求,如果有,也不一定有相同的顺序,我不知道如何实现这一点。我想出的唯一解决方案是在界面中有一个List<String>,并依靠程序员来读取参数x应该总是在http请求列表中的第一个,参数y第二个等等,参数z对于 http 请求 b 等,总是首先出现。

由于我可能是唯一接触此代码的人,从长远来看它可能不会造成问题,但如果存在的话,我仍然希望使用更好的解决方案。

【问题讨论】:

    标签: c# oop interface architecture


    【解决方案1】:

    你能做到以下几点:

    public class GetItemPriceRequest: IRequest
    {
            public string ItemNumber {set;get;}
            public string UserName {set;get;}
    }
    
    public GetItemHistoryRequest: IRequest
    {
            // my properties
    }
    

    对于每个请求等等。并为每个请求提供一个响应类。这种方式更干净,更有条理。此外,您可以根据请求对象类型了解预期的参数。意思是,如果传递的请求对象的类型是GetItemPriceRequest;那么我应该看到ItemNumber 字段。

    我希望这能帮助您解决问题。如果您有问题,请告诉我。

    【讨论】:

    • 我有一个工厂可以创建相应的请求并返回一个IRequest。如果我执行以下操作:GetItemPriceRequest request = (GetItemPriceRequest)RequestFactory(GetItemPriceRequestString),如果已经填充了 ItemNumberUserName,我是否可以访问这些属性?
    • GetItemPriceRequestString 是类的名称?或者它是什么?只要您进行演员表,您就应该可以访问项目编号和用户名
    • 对不起,我工厂的真正签名是CreateApiRequest(ApiRequestType requestType),其中ApiRequestType 是一个枚举,表示我们要实例化哪个请求。只是为了确认一下,如果在GetItemPriceRequest 类的构造函数中我用值填充ItemNumberUserName,我将可以访问这些值(在构造函数中填充),即使它由CreateApiRequest(ApiRequestType requestType) 返回为一个请求?
    • 我猜CreateApiRequest 会返回一个继承自IRequest 的对象。只要将此返回的对象转换为您的类型(GetItemPriceRequest),那么您将可以在转换后访问其所有属性(ItemNumber)。
    【解决方案2】:

    另外,Command design pattern 对您很有帮助——它将命令请求封装为一个对象。此外,您还可以使用不同的请求、队列或日志请求参数化客户端,并支持可撤消的操作。

    以及如何

    做各种HTTP请求以获取不同种类的信息

    可以帮助您ParameterObject - 它处理一系列调用(更多详细信息here)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多