Где указать флаг для использования базового класса - PullRequest
0 голосов
/ 18 марта 2009

У меня есть базовый класс с именем Request.cs

В этом классе у меня есть следующие приватные поля:

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

конечная точка - это просто строка, такая как "http://SomeThridPartyAPIURIEndPoint"

В этом классе у меня есть метод SendRequest.

Подклассы, например, представляют определенные вызовы API:

UpdateCustomerRequest.cs (наследует Request.cs) DeleteCustomerRequest.cs (наследует Request.cs)

и т. Д.

В классе Request есть метод SendRequest, который принимает URI и выполняет работу по отправке запроса API.

Некоторые виды вызовов API требуют, чтобы идентификатор сеанса передавался, а другие - нет. Единственное отличие в URI - это добавленный параметр, называемый sessionID.

Поэтому я пытаюсь найти лучший и наиболее эффективный способ установить «флаг» для каждого типа вызова API (подкласса), так как каждый может или не может требовать отформатированный URI по сравнению с обычным. Поэтому в моем базовом классе я мог проверить, нужно ли мне использовать _requestURI против _requestURIAuthBased в моем Request.SendMethod для подкласса, который я собираюсь вызывать, чтобы сделать этот вызов API.

Ответы [ 2 ]

1 голос
/ 18 марта 2009

Если я следую тому, что вы просите, лучший способ, которым я могу придумать, - это следовать модели класса 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 ;
       // :
     }
 }
0 голосов
/ 18 марта 2009

Сделать недвижимость в базовом классе

...

// 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; } }

....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...