Как объяснить программисту принцип единой ответственности?
Нужно объяснять на примерах. Покажите, почему деление на слои хорошо, чем оно удобно, — на конкретном примере. Покажите, насколько удобнее тестировать отдельные классы, в которые можно сделать dependency injection стаба или мока. Да куча примеров есть, вот на них и показывайте, желательно применительно к вашему конкретному случаю.

Людям намного проще сначала понимать конкретные вещи а уже потом через них осознавать более абстрактные принципы.
Предложите ему в добровольно-принудительном порядке заняться рефакторингом во внеурочное время. В добровольном — значит, без оплаты часов.
Для усиления эффекта рекомендую сделать это предложение, когда ориентировочное(на ваш взгляд) количество требуемых часов приблизится и/или перевалит за пару сотен.