Я реализую API с помощью ServiceStack. Одним из ключевых аспектов моего решения является агрессивная стратегия проверки.
Я использую ValidationFeature ServiceStack, что означает, что если в контейнере приложения зарегистрирован IValidator‹ ReqDto > (или его потомок: AbstractValidator‹ ReqDto >), проверка будет автоматически запущена перед службой.
Под агрессивной проверкой я подразумеваю, что я проверяю все возможные сценарии ошибок и логические проверки на уровне валидатора. В результате моя сервисная логика предельно проста и кратка.
Эта независимость логики службы от валидации службы очень хороша с практической точки зрения, потому что ее очень легко читать и рассуждать о логике/реализации службы. Тем не менее, я начинаю думать, что правила и наборы правил FluentValidation лучше подходят для простой проверки формата, а не для прямого доступа к базе данных, как это делаю я (в основном для проверки ошибок 404, возникающих из идентификаторов, извлеченных из запроса).
Вопросы:
1: Является ли концептуально неправильным для логики проверки доступ к базе данных?
2: Из того, что я видел до сих пор, включая источник SS, я не нашел форму для определения правила FluentValidation для таких случаев, как: извлечь идентификатор из запроса, получить доступ к базе данных, получить объект и выдать 404, если запись не найдена. Я использую правила FV только для определения основных проверок формата, таких как:
RuleFor(x => x.UserName).NotEmpty();
RuleFor(x => x.Password).NotEmpty();
Остальное делаю вручную. У кого-нибудь есть решение этой проблемы?
ПРИМЕЧАНИЕ. Это не вопрос о том, как преобразовать ValidationResult/ValidationError в HttpResult/HttpError. Я рассмотрел это, используя ErrorResponseFilter ValidationFeature, который был представлен в SS 3.9.44. Спасибо