Все эти классы, фабрики, абстракции и прочие умные слова нужны для того, чтобы программист мог управлять сложностью создаваемой им программы. Наше сознание хранит в среднем 7 различных сущностей, так что разрезав задачу на законченные куски - объекты, мы даем себе и коллегам возможность уменьшить количество сущностей, которые нужно держать в голове.
Далее, программа, порезанная на части, допускает замену одних частей на другие. Это дает возможность разрабатывать программу, постепенно наращивая сложность и заменяя ненаписанные еще куски затычками, тестировать ее, заменяя сложную реализацию чего-то предсказуемой затычкой и переносить готовые куски кода с место не место, без переписывания заново всей программы в случае небольшого изменения логики.
Когда такой подход оправдан - практически всегда. Программа с хорошо устроенной внутренней структурой гораздо гибче и поддерживается лучше, чем длинная простыня без таковой структуры.