[#] [Перевод] Валидация: внутри сущностей или снаружи?
habrabot(difrex,1) — All
2016-05-04 11:00:08


_Обратите внимание, что хотя пост написан от первого лица, это перевод статьи из блога 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