Свободная проверка - это один из способов настройки выделенных объектов проверки, который вы будете использовать, когда хотите рассматривать логику проверки отдельно от бизнес-логики. Парадигма аспектно-ориентированного программирования (AOP) позволяет разделить сквозные проблемы внутри системы, и валидация является одной из таких проблем. Разделение проверки помогает очистить код вашего домена и сделать его более сплоченным, а также дает вам единственное место для поиска логики проверки.
Проверка на основе аннотаций MVC - это очень «дешевый» способ получить некоторую базовую проверку в приложении, не тратя время на создание выделенных объектов проверки, создание системы проверки, которая организует их и объединяет все вместе. Это очень легко настроить, но может сделать ваши доменные объекты менее чистыми.
Для небольших систем, где вся логика проверки может обрабатываться с помощью аннотаций, я бы рекомендовал просто использовать аннотации, потому что их так легко настроить. Для более крупных и сложных систем я бы рекомендовал разделить задачу проверки с использованием объектов проверки.
Мне лично нравится использовать оба подхода: добавить атрибуты валидации в классы ViewModel (что означает, что аннотации не загромождают объекты моего домена), а также иметь выделенные объекты валидатора в слое моего домена. Это небольшое количество дублирования, но использование аннотаций настолько быстро и просто, что я считаю, что это стоит дополнительных затрат на обслуживание.