Как произвести валидацию модели до сохранения при использовании паттерна Repository?
при использовании паттерна репозиторий вам стоит перестать думать о модели которая путешествует через систему, как о месте где должна случаться валидация входных данных. Такой подход получил распространение благодаря RAD-framework'ам (Yii и ему подобные) - упрощенка цель которой - быстрая скорость разработки.
Если смотреть на архитектуру с точки зрения "чистоты", то:
Модель которая путешествует через всю систему должна содержать в себе только доменную логику, или не содержать ее вовсе (т.е. по факту являться Value-object'ом).
Валидация входных данных описывается отдельной моделью - моделью реквеста - и содержит в себе логику валидации/маппинга/и пр.
т.е. более менее стандартный подход со стороны расширяемости, надежности, тестируемости и гибкости приложения к последующим изменениям - это иметь валидацию/парсинг входных данных отдельно для каждого случая (например отдельно для вебформ и отдельно для JSON/XML/etc API, конечно фрагменты могут быть переиспользованы, наследованы или примешаны и т.д.), модели - отдельно, работу со стораджом отдельно.
Последнее вы уже сделали = репозиторий как раз оно.
Так что ваше предположение - верно.
В случае репозитория у вас есть энтити, содержащее данные, которые будет обрабатывать репозиторий. Обычно валидация выполняется в сеттерах энтити, или конструкторе. Можно ее выполнять и в репозитории, в этом случае можно обрабатывать энтити по интерфейсу.