Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Обсуждение статей
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2018, 11:38   #1
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,606
По умолчанию Вопрос актуализации манов, кто за ними следит, и почему жалуются на устаревшие примеры, которые переходят из проекта в проект при существующих современных альтернатив?

Мы же часто берем примеры из манов не задумываясь, особенно на старте изучения.

можно рассмотреть примёр у Флёнова. - http://www.flenov.info/blog/show/Mal...svyazannyy-kod

Скопировал на форум для ознакомления со статьёй:

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

Вот взять для примера всеми любимые фреймворки для 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)
Можно сохранить этот мейлер в качестве локальной переменной и использовать его. Больше не нужно задумываться о том, какой сервис будет создан, легче перейти на другой, в случае необходимости и так далее.
Alar вне форума Ответить с цитированием
Старый 27.04.2018, 13:06   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Автор прав что не пишут в примерах абстракции. Но зачем городить лишние абстракции? Когда я ищу код я в первую очередь ожидаю увидеть минимально рабочий пример. Потому что одно дело увидеть а другое дело пощупать этот пример. Вот рабочий пример я могут скомпилировать и поломать по модифицировать по отлаживать.

А тут автор предлагает либо писать абстракции это же получается полуфабрикаты получаются. Которые ещё и приготовить надо и не факт что эти приготовления займут как с Юпи 5 минут (Юпи-просто добавь воды). Скорее напротив несколько часов.

Зачем мне в примере шелуха по созданию интрефейса? Лишний код только отвлекает от главного.

Так что с автором я не согласен. Если он хочет видеть качественный код то для этого мастер-классы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 27.04.2018, 13:08   #3
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

А какой смысл им в примере для отправки письма приводить пример DI? Если он у тебя в проекте есть, то ты сам решишь хочешь ли абстрагироваться от конкретной реализации. В большинстве проектов этого нет, особенно в легаси. Любая технология должна применяться к месту и со знанием дела. Это относиться и к инверсии контроля. И вообще применять SOLID, без определенного набора знаний вредно. Поэтому фреймворк показывает самый примитивный пример.
Возьмем людей, с которыми работаю я (все программисты на .net или oem-щики). Для большей части лень прочитать документацию по TPL и ключевым словам async/await. Вводить асинхронное программирование сложно, любая ошибка с использованием тасок приводит к панике. Приходиться сидеть с ними, объяснять, читать лекции. Поэтому SOLID или TDD у нас тоже зависает на уровне сервисов, которые написал я. Я не могу сказать, что у них недостаточно квалификации или еще чего-то, просто они очень инертны. Таким людям нужны примеры с DI? Серьезно? Они либо выкинут DI, либо найдут пример, где его нет. Ну или фреймворк сменят (может и на более худший), где этого "непонятного" нет.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 29.04.2018, 12:34   #4
jura_k
gamer
Участник клуба
 
Аватар для jura_k
 
Регистрация: 09.05.2015
Сообщений: 1,550
По умолчанию

Лень двигала прогресс всегда вперёд.
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/
В ожидании Кеши...
jura_k вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему при компиляции программы ,все переменные которые начинаются на 0 теряют этот ноль и становятся обрезанными. GRUB_666 Помощь студентам 13 27.12.2016 12:18
Проект VB5 в современных VS Stilet Софт 2 18.06.2014 21:53
Запрос sql. Найти людей, которые чаще всего переходят с одного тарифа на другой. GoodNight SQL, базы данных 3 28.05.2014 13:40