Сторонняя интеграция с 3-уровневой архитектурой - PullRequest
0 голосов
/ 18 мая 2019

У меня есть интеграция со Stock, и каждый раз, когда я хочу публиковать / получать данные, я должен настраивать stockContext, получая некоторые данные из моей базы данных. Таким образом, мои сервисы, такие как ProductService, могут работать с этой стандартной интеграцией. У меня вопрос могу ли я настроить свой stockContext в отдельном Сервисе? Вот пример:

public class StockProviderService : IStockProviderService {

    private readonly IDatabase _context;

    public StockProviderService ()
    {
        _context = new Database();
    }

    public StockProviderService (IDatabase context)
    {
        _context = context;
    }

    public IDataProvider GetStockContext(Integration name, Guid merchantId)
    {
        var merchantCredentials = _context.StockCredentials.FirstOrDefault(wc => wc.MerchantId == new merchantId);

        var config = new StockIntegrationConfig()
        {
            ApiKey = merchantCredentials.ApiKey,
            ApiSecret = merchantCredentials.ApiSecret
        };

        return StockIntegrationEngine.GetDataProvider(name, config);
    }
}

И теперь я могу использовать мой ContextConfigurator как:

public async Task SendProductsToStock(IEnumerable<Guid> productIds, Integration name, Guid merchantId)
    {
        var dataProvider = _stockProvider.GetStockContext(name, merchantId); <-- HERE

        var products = _context.Products
            .Where(p => productIds.Contains(p.ProductID))
            .ToList();

        var stockProducts = Mapper.Map<List<ProductDataRequest>>(products);

        await dataProvider.Products.CreateProducts(stockProducts);

        await _context.SaveChangesAsync();
    }

Может быть, лучше иметь мой GetStockContext в другом файле / проекте, не в ServiceLayer Service? Но я сомневаюсь, что мне нужно получить некоторые данные из БД, прежде чем я смогу их настроить

...