Я решаю используя идею асинхронки. Вместо ->save() я пишу класс Database, который делает ->persistForSave() и в конце скрипта или в середине (если это скрипт здоровенный типа парсера) вызываю ->flush(), в тот момент когда уже точно уверен что вся логика прошла верно.
Слава, Я и написал, что все через это проходят, это нормально.
Когда придёт понимание, что нужно делать архитектуру легковесную, необходимую, тогда и пропадёт желание делать перезаклад в 10 раз.
это именно и будет Построение архитектуры.
Кстати, в стройке, в архитектуре зданий то же самое.
Там порой делают огромный перезаклад прочности, огромные колонные, огромные балки, но тонкие другие месте - горе архитекторы. Если такие здания в итоге строят, то получается в несколько раз дороже, чем правильно рассчитанное здание с той же прочностью.
Отличие в программировании в том, что код может расширятся.
Но тогда то, что не ожидается изначально, не нужно закладывать заранее.
А когда нужно добавлять, обязательно нужно делать рефакторинг. По моему опыту обычно меняется не более 10% функционала. поэтому делать перезаклад на остальные 90% не нужно.
Вобщем архитектура, это не перезаклад, а оптимизация кода и ресурсов на этот код.