_Обратите внимание, что хотя пост написан от первого лица, это перевод статьи из блога Jimmy Bogard, автора AutoMapper._ Меня часто спрашивают, особенно в контексте архитектуры вертикальных слоев (vertical slice architecture), где должна происходить валидация? Если вы применяете DDD, вы можете поместить валидацию внутри сущностей. Но лично я считаю, что валидация не очень вписывается в ответственность сущности. Часто валидация внутри сущностей делается с помощью аннотаций. Допустим, у нас есть Customer и его поля FirstName/LastName обязательны:
public class Customer
{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
}
Проблем с таким подходом две:
* Вы изменяете состояние сущности до валидации, то есть ваша сущность может находиться в невалидном состоянии
* Неясен контекст операции (что именно пытается сделать пользователь)
И хотя вы можете показать ошибки валидации (обычно генерируемые ORM) пользователю, не так-то просто сопоставить исходные намерения и детали реализации состояния. Как правило, я стараюсь избегать такого подхода. [Читать дальше →][1]
[1]:
https://habrahabr.ru/post/282878/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut