У меня есть модель класса, использующая дизайн шаблона GRASP, в частности шаблон контроллера, поэтому ProductController
обрабатывает все экземпляры Product
, а этот обрабатывает все экземпляры Kardex
.
ProductController
может сохранять, редактировать и удалять продукты.Product
может сохранять и удалять движения kardex.
Я могу справиться с этим только с помощью ООП, но мне нужно, чтобы некоторые методы вызывали API для сохранения и/или получения данных из БД.
Мое приложение будет постоянно выполнять операции с этим API, поэтому я решил использовать IHttpClientFactory
с DI.
Если я ввожу контроллеры с их соответствующими интерфейсами, это не проблема, но если экземпляр продукта должен SaveKardex
, мне придется вводить его для использования HttpClientFactory
, предотвращая создание экземпляра. Итак, я сделал это:
public class Product
{
private readonly IHttpClientFactory _httpClientFactory;
public int prop1 { get; set; }
public Product(IHttpClientFactory httpClientFactory) //this works
{
_httpClientFactory = httpClientFactory;
}
public Product() //this also works
{
prop1 = 10;
}
public async Task<bool> SaveKardex(Kardex kardex)
{
var client = _httpClientFactory.CreateClient("BdClient");
var uriString = client.BaseAddress + $"product/kardex";
var message = RequestBuilder.RequestMessage(HttpMethod.Post, uriString);
var res = await client.SendAsync(message);
....
....
return true;
}
}
Если я создам экземпляр нового Product
или будет десериализован, я не смогу вызвать метод SaveKardex
, потому что я не буду использовать введенный экземпляр, а httpClientFactory будет нулевым.
Что я могу сделать? Какие-либо предложения?
Я думал об использовании экземпляров HttpClient, но лучший ли это способ, учитывая большое количество подключений к API?
Спасибо!
ProductModel
, который является более или менее POCO, и пусть службы DI используют их. - person Andy   schedule 19.05.2021