Vuex best practies или как правильно делать?
Все данные в state должны быть логически разделены на модули. Все комиты тоже должны быть логически разделены внутри каждого модуля. Лично я предпочитаю вообще не создавать корневого хранилища — всё в подмодулях. 
Что касается валидации, то Aetae всё верно написал. 
Лично я использую следующий подход. Он не лучший, и не всегда подходящий. 
— Все компоненты вызывают только action
— Комиты вызываются только внутрии action после всех проверок и валидаций.
— Все комиты расчитаны на получение заведомо корректных данных.
Таким образом:
мутация — низкоуровневый инструмент для управления хранилищем. 
action — высокоуровневый менеджер по управлению хранилищем, который проверяет все данные, выполняет любые дополнительные манипуляции, преобразования, разбивает большие данные на части если это нужно и так далее, и только потом уже готовые данные передаёт в мутацию.
компонент — пользователь хранилища. Которые не вызывает мутации напрямую, а вызывает только action. И в исключительных случаях может получить прямой доступ к хранилищу в обход любых проверок и изменений вызвав напрямую мутацию.
Всё должно быть в рамках логического, а не технического деления, это не только Vue касается.
Если вы валидируете ввод - это часть ввода и никакого отношения к состоянию не имеет. Если вы валидируете сторонние данные - это часть "получения сторонних данных" и т.д.
Также и с изменением состояния - если одна логическая операция требует изменений нескольких элементов состояния то и выполняться она должна одной операцией.