-
-
Notifications
You must be signed in to change notification settings - Fork 164
WebLayer
Development of UI Logic with implementation. Interfaces drives business requirements and implementations in this layer. The application's main starting point is the ASP.NET Core web project. This is a classical console application, with a public static void Main method in Program.cs. It currently uses the default ASP.NET Core project template which based on Razor Pages templates. This includes appsettings.json file plus environment variables in order to stored configuration parameters, and is configured in Startup.cs.
Web layer defines that user required actions in page services classes as below way;
public interface IProductPageService
{
Task<IEnumerable<ProductViewModel>> GetProducts(string productName);
Task<ProductViewModel> GetProductById(int productId);
Task<IEnumerable<ProductViewModel>> GetProductByCategory(int categoryId);
Task<IEnumerable<CategoryViewModel>> GetCategories();
Task<ProductViewModel> CreateProduct(ProductViewModel productViewModel);
Task UpdateProduct(ProductViewModel productViewModel);
Task DeleteProduct(ProductViewModel productViewModel);
}
Also implementation located same places in order to choose different implementation at runtime when DI bootstrapped.
public class ProductPageService : IProductPageService
{
private readonly IProductAppService _productAppService;
private readonly ICategoryAppService _categoryAppService;
private readonly IMapper _mapper;
private readonly ILogger<ProductPageService> _logger;
public ProductPageService(IProductAppService productAppService, ICategoryAppService categoryAppService, IMapper mapper, ILogger<ProductPageService> logger)
{
_productAppService = productAppService ?? throw new ArgumentNullException(nameof(productAppService));
_categoryAppService = categoryAppService ?? throw new ArgumentNullException(nameof(categoryAppService));
_mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
}
public async Task<IEnumerable<ProductViewModel>> GetProducts(string productName)
{
if (string.IsNullOrWhiteSpace(productName))
{
var list = await _productAppService.GetProductList();
var mapped = _mapper.Map<IEnumerable<ProductViewModel>>(list);
return mapped;
}
var listByName = await _productAppService.GetProductByName(productName);
var mappedByName = _mapper.Map<IEnumerable<ProductViewModel>>(listByName);
return mappedByName;
}
}
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.