【问题标题】:Where to specify flag for Base class use在哪里指定基类使用的标志
【发布时间】:2009-03-19 14:01:52
【问题描述】:

我有一个名为 Request.cs 的基类

在这个类中,我有以下私有字段:

protected string _requestURI = xxpConfig.xxEndpoint;
protected string _requestURIAuthBased = xxConfig.xxEndpoint + "?SessionID=";

endpoint 只是一个字符串,例如“http://SomeThridPartyAPIURIEndPoint

在这个类中,我有一个名为 SendRequest 的方法。

例如,子类代表某些 API 调用:

UpdateCustomerRequest.cs(继承 Request.cs) DeleteCustomerRequest.cs(继承 Request.cs)

等等。

Request 类有一个名为 SendRequest 的方法,该方法接受 URI 并完成发送 API 请求的工作。

某些类型的 API 调用需要传递 sessionID,而其他类型则不需要。 URI 的唯一区别是添加了一个名为 sessionID 的参数。

所以我试图找出最好和最有效的方法来为每种类型的 API 调用(子类)设置“标志”,因为每种 API 调用可能需要也可能不需要 auth 格式的 URI 与常规。因此,在我的基类中,我可以检查我是否需要在我的 Request.SendMethod 中使用 _requestURI 与 _requestURIAuthBased 来作为我将要调用的子类来进行 API 调用。

【问题讨论】:

    标签: c# architecture


    【解决方案1】:

    如果我按照您的要求进行操作,我能想到的最好方法是遵循 EventArgs 类的模型。所有事件处理程序都接受一个 EventArgs 对象,但是,有时会传递一个派生类:

     public class RequestArgs { } 
     public class Request 
     {  // ...
         void virtual SendRequest(RequestArgs args);
     }
    
     // ----------------------------
    
     public class UpdateArgs : RequestArgs 
     { 
          public string SessionID {get; set;}
     }  
    
     class UpdateCustomerRequest : Request
     {  // ...
         void SendRequest(RequestArgs args)
         {
            UpdateArgs updateArgs = args as UpdateArgs ;
           // :
         }
     }
    

    【讨论】:

      【解决方案2】:

      在基类中创建一个属性

      ...
      
      // base class
      abstract string RequestURI { get; };
      
      // class that needs auth
      override string RequestURI { get { return _requestURIAuthBased; } }
      
      // class that dosn't needs auth
      override string RequestURI { get { return _requestURI; } }
      
      ....
      

      【讨论】:

      • 我没有关注你。我不是在问如何检查它,而是在问最好在哪里设置这个 useAuth。如果我有一堆实现 API 调用的子类,其中一半需要身份验证 URI,而另一半没有为每个子类指定身份验证 URI 以便基础可以检查它的最佳方法是什么?
      • 如果您在基类中创建一个属性,该属性将在其中使用,但您必须在某处获取 useAuth 以检查您的子类所代表的每种 API 调用类型。
      • 我注意到我第一次读错了这个问题。我想我的编辑不够清楚。将修复
      猜你喜欢
      • 2015-07-09
      • 1970-01-01
      • 2019-05-03
      • 2012-12-27
      • 2010-09-25
      • 1970-01-01
      • 2016-10-03
      • 2014-02-14
      • 2013-01-21
      相关资源
      最近更新 更多