-
-
Notifications
You must be signed in to change notification settings - Fork 164
ApplicationLayer
Mehmet Özkaya edited this page Mar 24, 2019
·
6 revisions
Development of Domain Logic with implementation. Interfaces drives business requirements and implementations in this layer. Application layer defines that user required actions in app services classes as below way;
public interface IProductAppService
{
Task<IEnumerable<ProductDto>> GetProductList();
Task<ProductDto> GetProductById(int productId);
Task<IEnumerable<ProductDto>> GetProductByName(string productName);
Task<IEnumerable<ProductDto>> GetProductByCategory(int categoryId);
Task<ProductDto> Create(ProductDto entityDto);
Task Update(ProductDto entityDto);
Task Delete(ProductDto entityDto);
}
Also implementation located same places in order to choose different implementation at runtime when DI bootstrapped.
public class ProductAppService : IProductAppService
{
private readonly IProductRepository _productRepository;
private readonly IAppLogger<ProductAppService> _logger;
public ProductAppService(IProductRepository productRepository, IAppLogger<ProductAppService> logger)
{
_productRepository = productRepository ?? throw new ArgumentNullException(nameof(productRepository));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public async Task<IEnumerable<ProductDto>> GetProductList()
{
var productList = await _productRepository.GetProductListAsync();
var mapped = ObjectMapper.Mapper.Map<IEnumerable<ProductDto>>(productList);
return mapped;
}
}
In this layer we can add validation , authorization, logging, exception handling etc. -- cross cutting activities should be handled in here.
You can check full repository documentations, step by step development and how to build your custom scenario's on this basement in 100+ page eBook PDF from here - http://www.aspnetrun.com.