В настоящее время я работаю над решением с этой архитектурой:
ApplicationCore
проект (содержит доменные сущности и бизнес-логи c) Infrastructure
проект ( содержит указанный c код инфраструктуры, такой как Entity Framework) WebAPI
проект (REST API для Angular front и других клиентских служб)
Давайте представим веб-форму для создания например, автомобиль с указанием основной информации и деталей, который отправляет в действие контроллера, например:
[HttpPut]
public async Task<IActionResult> Create(CarModel carModel)
, где CarModel:
public class CarModel
{
public string Manufacturer { get; set; }
public string Model { get; set; }
public IEnumerable<CarPartModel> Parts { get; set; }
}
public class CarPartModel
{
public string Name { get; set; }
public IEnumerable<CarPartAttributeModel> Attributes { get; set; }
}
public class CarPartAttributeModel
{
public string Code { get; set; }
public object Value { get; set; }
}
Мой бизнес-уровень будет содержать ICarService
с методом CreateCar
, который проверял бы все вставленные данные, чтобы проверить их и применить некоторые правила. Теперь я не знаю, как правильно передать эту сложную модель из контроллера в мою бизнес-логику c.
Мне пришло в голову два варианта:
- To поместите
CarModel
в мой BLL и просто передайте его методу CreateCar
- Чтобы создать аналогичный DTO в BLL и скопируйте
CarModel
в этот DTO, чтобы модели оставались внутри слоя WebAPI
Что считается приемлемой или лучшей практикой? Есть ли третий вариант?