Наверно в каждой книге написано про то, что нужно писать код без жёстких зависимостей - использовать интерфейсы и инъекцию зависимостей. Но почему-то мало, кто реально следует этому. И отчасти это проблема документации, на которую смотрят программисты.
Вот взять для примера всеми любимые фреймворки для PHP и посмотреть на код оправки почты - вот возьмем пример отправки E-mail из Symfony. Я специально беру его, потому что фреймворк хороший и в нем можно писать код без записимостей.
public function indexAction($name, \Swift_Mailer $mailer) { $message = (new \Swift_Message('Hello Email')) ->setFrom('send@example.com') ->setTo('recipient@example.com') ->setBody( $this->renderView( // templates/emails/registration.html.twig 'emails/registration.html.twig', array('name' => $name) ), 'text/html' ) }
Пример взят с сайта сайта Symfony.
Прямо в методе контроллера нам предлагают использовать жёсткую привязку к конкретной реализации Swift Message. А что если завтра эта реализация умрет? Где интерфейс, который абстрагируется от этой конкретной реализации? Где Dependency Injection?
Фреймворк - это круто, он предоставляет кучу вкусняшек, но уже вот здесь пользователи видят как не нужно в реальности делать.
Фреймворка должен упрощать программирование и примеры в официальной документации должны использовать все современные рекомендации по хорошем написанию кода. А то получается, что все говорят отросшем тоне, а потом программисты берут код из официальной документации а он оказывается далеко не идеален и оказывается программист ещё должен сделать кучу телодвижений, реже чем использовать код.
А ведь в Symfony уже есть все готовое, просто пример на сайте не отражает это. Можно зарегистрировать сервис:
services:
sample.service:
class: %sample.service.class%
arguments: [@mailer]
И теперь через конструктор получать его:
__construct($mailer)
Можно сохранить этот мейлер в качестве локальной переменной и использовать его. Больше не нужно задумываться о том, какой сервис будет создан, легче перейти на другой, в случае необходимости и так далее.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
Полностью согласен, когда лезешь в документацию, ожидаешь увидеть там best practices, но видимо те кто ее пишут жертвуют чистотой кода в угоду наглядности.
http://www.programmersforum.ru/showthread.php?t=319390 - скопировал статью на форум :)
Ovndvbjcv
Довольно интересно
Моя благодарность за полезную информацию. Благодарю всех. Отдельное спасибо пользователю Admin
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.