Заметь что этот код не привязан ни к какому фреймворку или библиотеке, он универсален. Он не требует наличия какой-то платформы вроде веб-сервера так как не обращается к GET/POST/COOKIE и подобным глобальным переменным.
Все зависимости явно указаны и внедряются через конструктор. Ты можешь например создать 2 экземпляра сервиса с разными объектами $db.
Некоторые фреймворки позволяют получать сервисы не через new, а через какие-нибудь DI контейнеры:
$someService=$container->get('some_service');
$someService->doSomething($arg1);
Но это никак не запрещает нам выкинуть контейнер и создать объект через new.
В общем, это однозначно неплохой код [spoiler]сам себя не похвалишь...[/spoiler]
А теперь посмотрим код, основанный на вызовах методов контроллера извне.
Просто так создать контроллер ты не можешь так как там надо делать определенные вызовы, что-то передавать, и т.д. Например ты должен передать Request c информацией о HTTP-запросе, а где ты его возьмешь если код запускается из командной строки? В некоторых фреймворках код контроллера выполняется внутри диспатч-цикла — его надо будет повторить.
$ctrl=new Some_Controller($app);
$request=new Request(....);
$ctrl->setRequest($request);
$ctrl->init();
$ctrl->doDomething();
Даже если у тебя получается решить эти проблемы, получается сложный, сильно связанный (с большим числом зависимостей) код, который никакого сравнения не выдерживает с кодом выше.
Зачем класть логику в контроллеры (или псевдоконтроллеры в которые передается объект-контроллер), если можно сделать нормально?
> где та тонкая грань между переписать и отрефакторить?
Что больше, выгода от рефакторинга или затраты на него. Переписать все приложение явно не даст огромной выгоды, а затрат будет много.
> как возможно вызвать из такого пустого класса модель? он же никак не связан с фреймворком. а для связи я и использую this
Внедрение зависимости через конструктор:
$s=new Strepsils($model);
Внедрение через метод:
$s=new Strepsils();
$s->setModel($model);
Внедрение через контейнер:
$s=$container->get('strepsils');// контейнер сам позаботится о зависимостях