Где объединить данные базы данных с данными файловой системы в .NET - PullRequest
0 голосов
/ 31 марта 2019

Я создаю приложение .NET Core Web API, где люди могут найти планы строительства домов.

Приложение имеет таблицу базы данных, которая содержит такую ​​информацию, как адрес, почтовый индекс, город и идентификатор.

PDF-файлы хранятся в файловой системе и группируются в папки с тем же идентификатором, что и в базе данных.

Это мой текущий код контроллера:

[HttpGet]
public async Task<ActionResult<List<BuildingplanDto>>> Get(
    [FromQuery] string street,
    [FromQuery] string city,
    [FromQuery] string housenumber)
{
    //Retrieve building plan info from database
    List<Buildingplan> buildingplans = await _BuildingplanService.FindAsync(street, city, housenumber);

    List<BuildingplanDto> buildingplanDtos = new List<BuildingplanDto>();
    BuildingplanDto buildingplanDto;
    foreach (Buildingplan buildingplan in buildingplans)
    {
        //Map database entity to Dto
        buildingplanDto = _mapper.Map<Buildingplan, BuildingplanDto>(buildingplan);
        //Add folders from the filesystem to the Dto
        buildingplanDto.Folders = _documentService.GetFolders(buildingplan.DossierId);
        buildingplanDtos.Add(buildingplanDto);
    }

    return Ok(buildingplanDtos);
}

Однако этот код не выглядит правильным; В контроллере слишком много логики, которую я хочу поместить в другое место. Хотя я не знаю, где его поставить.

Может ли кто-нибудь дать мне указание, куда поместить эту логику? Я также открыт для других советов.

1 Ответ

0 голосов
/ 01 апреля 2019

Вам необходимо создать слой приложения, где каждый слой имеет определенную цель. Самым базовым уровнем является UI-Logic-Data, но есть и другие более продвинутые архитектуры - например, https://morphological.wordpress.com/2011/08/29/5-layer-architecture/ (мой блог).

Думайте о контроллере API как о пользовательском интерфейсе - он должен отвечать только за обработку запроса API и ответный ответ; «тяжелая работа» по сбору данных, поступающих в ответ, будет сделана в другом месте.

Например, базовая 3-слойная модель может выглядеть следующим образом:

  1. Уровень API - отвечает за обработку внешних запросов API.

  2. Логический уровень - отвечает за принятие решений, таких как организация различных вызовов, обеспечение соблюдения бизнес-правил и т. Д.

  3. Уровень данных / сервиса - отвечает за выборку данных, например, из базы данных, файловой системы или внешнего API.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...