Достаточно ли промежуточного программного обеспечения FluentValidation в .NETCore WebAPI или мне следует снова выполнить проверку на уровне служб? - PullRequest
0 голосов
/ 01 марта 2020

У меня очень простой 3-уровневый слой ASP.NET Core WebAPI приложение:

  1. Домен - с Entities, Data interfaces, Services и DTO объекты (которые являются единственными входными и выходными объектами). Таким образом, "интерфейс домена" - это службы, которые принимают входные DTO и возвращают выходные DTO.
  2. Инфраструктура - реализация Data interfaces (хранилища данных) и CodeFirst Migrations.
  3. WebAPI - Стандартный ASP. NET Core 3.1 Проект веб-API.

Проект WebAPI возвращает DTO "Output" в контроллерах. Для конечных точек, которые принимают полезную нагрузку, используются входные DTO. Контроллеры очень похожи на Сервисы из Домена. Контроллеры выставляют Доменные Сервисы миру (очевидно, интерфейсу Домена).

Но потом идет валидация ... Я знаком с FluentValidation и с ASP. NET Core-сантехникой - это потрясающее промежуточное ПО:

        services.AddControllers()
            .AddFluentValidation(opt =>
            {
                opt.RegisterValidatorsFromAssemblyContaining(typeof(PersonInputValidator));
            });

Я реализую валидацию для каждого "Входного" DTO, и это прекрасно работает, НО ... Я не уверен, что этого достаточно. Если вы берете какой-либо класс обслуживания, он практически не проверен. Это. NET Базовое промежуточное программное обеспечение, которое технически проверяет ввод в Контроллер.

Должен ли я снова "дважды проверить" в Сервисах? Если да, есть ли плавный способ повторного использования валидаторов, которые у меня уже есть?

Ответы [ 3 ]

2 голосов
/ 02 марта 2020

Вы никогда не должны запускать проверки дважды. Данные из вашего веб-API должны быть проверены. Если вы когда-либо используете свои сервисы с любым другим интерфейсом, кроме веб-API, вы также можете реализовать свои свободные проверки. Вот хороший пример для быстрой проверки: https://github.com/jasontaylordev/NorthwindTraders

0 голосов
/ 03 марта 2020

FluentValidations можно использовать в контроллерах, сохраняя их стройность. На бизнес-уровне также могут быть добавлены другие правила проверки, но состояние модели проверяется на уровне WebApi, который является шлюзом для системы. FluentValidation использует промежуточное программное обеспечение, поэтому при сбое проверки контроллер даже не срабатывает. Я также предлагаю внедрить промежуточное программное обеспечение, которое преобразует любые исключения, генерируемые бизнес-уровнем, в соответствующие коды состояния http, что также делает ваши контроллеры очень чистыми. На бизнес-уровне иногда используются также правила проверки, например, когда вы хотите проверить наличие зависимых данных.

0 голосов
/ 02 марта 2020

Для уровня обслуживания и уровня представления я обычно выполняю проверку FV / dto на уровне обслуживания. Таким образом, сервисы могут быть повторно использованы, и валидация идет с ними. Это также позволяет вам держать ваши контроллеры худыми. В ваших контроллерах может быть область действия, чтобы иметь уровень представления, определяющий c проверки / проверки, например, сбой привязки модели. Но это может быть просто базовая реализация модели состояния c, я бы не стал использовать FV.

...