Мало кто пишет не связанный код

Наверно в каждой книге написано про то, что нужно писать код без жёстких зависимостей - использовать интерфейсы и инъекцию зависимостей. Но почему-то мало, кто реально следует этому. И отчасти это проблема документации, на которую смотрят программисты. 

Вот взять для примера всеми любимые фреймворки для 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)

Можно сохранить этот мейлер в качестве локальной переменной и использовать его. Больше не нужно задумываться о том, какой сервис будет создан, легче перейти на другой, в случае необходимости и так далее. 


Комментарии

NoStorm

Полностью согласен, когда лезешь в документацию, ожидаешь увидеть там best practices, но видимо те кто ее пишут жертвуют чистотой кода в угоду наглядности.


Alar

http://www.programmersforum.ru/showthread.php?t=319390 - скопировал статью на форум :)


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповидания на русском или английском языке.

Пишите мне


Я в социальных сетях
Facebook Telegram Youtube Instagram