在Web API异步中映射业务逻辑

时间:2016-05-12 09:58:20

标签: c# asp.net asynchronous web

我正在使用EF 6创建一个Web API asp.net 5,没有任何存储库,UOW,Facade在EF之上。 我确实希望在服务层中应用业务规则,保持应用业务逻辑的异步(至少是每个API方法的返回) 并在Product to ProductVO之间进行一些转换

产品服务

public async Task<ProductVO> getProductVO(int id)
    {
        using (_context = new OnlineShopContext())
        {
            EntityMapper mapper = new EntityMapper();
            Product product = await GetAsync(id);
            Task<Supplier> supplier = _context.Suppliers.SingleOrDefaultAsync(s => s.ID == product.Supplier.ID);
            Task<Category> category = _context.Categories.SingleOrDefaultAsync(c => c.ID == product.Category.ID);
            return await mapper.map(product, await supplier, await category);
        }
    }

产品服务需要等待产品寻找供应商和类别。 (这是一个非常简单的案例,但考虑调用SP,或者存在锁定 在供应商或类别上,处理例外?)

实体映射器

public Task<ProductVO> map(Product product, Supplier supplier, Category category)
    {
        ProductVO productVo = new ProductVO(id: product.ID, productName: product.Name, supplierId: supplier.ID,
                supplierName: supplier.Name, categoryId: category.ID, categoryName: category.Name,
                thumbImageName: product.ThumbImageName, imageName: product.ImageName, price: product.Price
        );
        return new Task<ProductVo>productVo;
    }

考虑更复杂的评估产品列表的情况,直到匹配业务规则而不等待db的整个列表开始 匹配特定要求。类似于带有OrderByCompletion选项的AsyncEx库。

谢谢

0 个答案:

没有答案