Я ищу шаблон проектирования, который поможет упростить мой код.
Мой код использует HttpClient для вызова веб-API, который получает или публикует информацию, но каждый сеанс требует сначала входа в систему, когда файл cookieвозвращается в качестве идентификатора, и в конце делается вызов для выхода из системы, чтобы закрыть соединение.Итак, мой класс веб-API выглядит следующим образом:
public class APIHelper
{
public HttpClient myClient { get; set; }
public async void Login()
{
using (HttpResponseMessage response = await myClient.PostAsync("loginAddress", "loginInput"))
{
if (response.IsSuccessStatusCode)
{
//save cookie
}
}
}
public async void Logout()
{
using (HttpResponseMessage response = await myClient.PostAsync("logoutAddress", ""))
{
if (response.IsSuccessStatusCode)
{
//session ends
}
}
}
public void GetOrder() {...}
public void NewOrder(object OrderData) {...}
public void GetCustomer() {...}
public void NewCustomer(object CustomerData) {...}
}
И чтобы использовать их, я бы просто назвал их по порядку:
public Main()
{
APIHelper.Login();
APIHelper.GetOrder(); //or NewOrder, or GetCustomer, or any other actual API calls
APIHelper.Logout();
}
Есть ли в любом случае место для входа / выхода из системы?вызовы внутри каждого из реальных вызовов API, поэтому мне не нужно вводить их для каждого вызова?В идеале мне просто нужно настроить структуру один раз, а затем для любых создаваемых API-вызовов система автоматически вызовет вход / выход из системы в начале / конце.Какой шаблон проектирования решает эту проблему?Любой простой пример был бы очень полезен!
Спасибо.SC
===========================================
Изменить: попробовать предложение Диманоида
Спасибо за быстрый ответ!Я думаю, что это должно работать, но я получил еще одну складку: «Ссылка на объект требуется для нестатического поля, метода или свойства 'APIHelper.GetOrder ()'
Глядя на новый код, кажется,Мне нужен объект myClient (который является объектом HttpClient) в течение сеанса:
public void DoMyJob(Action job)
{
var myClient = new APIHelper(); //initiates a HttpClient object
myClient.Login();
try
{
job();
}
finally
{
myClient.Logout();
}
}
Но при вызове функции задания извне:
DoMyJob(APIHelper.GetOrder);
У меня нетобъект еще есть. Это легко обойти? Извините, я не прояснил это в OP, мой фактический исходный вызов выглядит следующим образом:
var myClient = new APIHelper();
myClient.Login();
myClient.GetOrder();
myClient.Logout();
Но благодаря вашему предложению, я думаю, что лучшепоместите инициализацию внутри метода DoMyJob.