Это как с юнит-тестами - по мере того, как тесты становятся все более специфичными, код должен становиться все более общим. То есть, по мере уточнения правил бизнес-логики, код, реализующий их, должен становиться все более и более абстрактным.

В 99 бутылок ООП высказывается идея, что каждый новый юнит-тест - это новое требование, сообщающее что-то новое о системе. После удовлетворения этого конкретного требования код должен поддерживать все подобные требования (т.е. все требования из того же класса).

В пределе вся реальная работа может выполняться библиотечным кодом общего назначения, а конкретное прикладное ПО только поставляет реальные данные и конфигурацию. Это делает возможным “построение” ПО из готовых компонентов, см. Разработка ПО как промышленный процесс и вообще всю вводную часть Объектно-ориентированная разработка - Якобсон, Ивар