1. PHP / Говнокод #4843

    +158

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    protected function composeResolvers()
        {
            require_once systemConfig::$pathToSystem . '/resolver/init.php';
            require_once systemConfig::$pathToSystem . '/resolver/templateMediaResolver.php';
            require_once systemConfig::$pathToSystem . '/resolver/moduleMediaResolver.php';
            require_once systemConfig::$pathToSystem . '/resolver/extensionBasedModuleMediaResolver.php';
            require_once systemConfig::$pathToSystem . '/core/fileLoader.php';
    
            $baseresolver = new compositeResolver();
            $baseresolver->addResolver(new fileResolver(systemConfig::$pathToApplication . '/*'));
            $baseresolver->addResolver(new fileResolver(systemConfig::$pathToWebRoot . '/*'));
            $baseresolver->addResolver(new fileResolver(systemConfig::$pathToSystem . '/*'));
    
            $resolver = new compositeResolver();
            $resolver->addResolver(new templateMediaResolver($baseresolver));
            $resolver->addResolver(new moduleMediaResolver($baseresolver));
            $resolver->addResolver(new extensionBasedModuleMediaResolver($baseresolver));
            $resolver->addResolver(new classFileResolver($baseresolver));
    
            if (function_exists('external_callback')) {
                external_callback($resolver, $baseresolver);
            }
    
            return new cachingResolver($resolver, 'resolver_media_cache');
        }

    Прямиком с http://govnokod.googlecode.com/svn/trunk/govnoquoter/www/bundle.php
    Там ещё много всего интересного!

    Запостил: Govnocoder#0xFF, 07 Декабря 2010

    Комментарии (77) RSS

    • Копипаст - труЪ инструмент труЪ говнокодера.
      Ответить
      • Где-то когда-то Страйкер писал, что не прочь увидеть здесь цитаты из кода сайта. Ну вот и свершилось ^_^
        Ответить
        • это свершилось раньше.
          Ответить
          • Зато в этот раз вон какое обсуждение поднялось. Раньше, по-моему, такого не было, этот случай отличается, ммм, размахом =)
            Ответить
    • >>require_once
      господи, бедные пыховцы. Это же неизвестный никому кроме пыховцев ад)
      Ответить
      • Я недавно испытал дикий багор, видя, как Расмус Лердорф в своём блоге призывает не пользоваться *_once и рассказывает, как именно эти операторы тормозят при выполнении. =_=
        Ответить
        • да да
          инклюжен гарды надо делать
          в самом популярном языке в 2010м году)
          Ответить
        • Кстати Лердорф фанат говнокодинка, именно потому и ПХП у него такой поганый получился.
          Если создатель языка призывает писать говнокод, то не удивительно что все его слушают)

          http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html
          Ответить
          • начал читать. Хочется более подробнее узнать.
            кстати, английский Лердорфа читается легко.
            Ответить
            • хочется узнать реально ли он говнокодит или просто примеры упростил.
              Ответить
              • реально) это не видно по языку?
                Ответить
                • видно что говнокодит. Но надо прочитать, что он пишет, думаю. А не сразу выдавать вердикт.
                  Ответить
                  • Он пишет примерно следующее:
                    "зачем делать сложные фреймворки? все равно они за вас ничего не сделают, и надо все писать руками". И после этого пишет говнокод.

                    Ответить
                    • тоже это прочитал.
                      пока отложил чтение. Позже скажу свой вердикт.
                      ===
                      Но если он реально так считает, то это плохо.
                      Это говорит о том, что человек не занимался разработкой сайтов, как следует.
                      Ответить
                      • О чем ему и пишут ниже (дескать все это хорошо для гостевой книги, но не для продукта, где 7 разработчиков).

                        И дело не в сайтах. Дело в подходе в целом. Лердорф -- плохой программист. Он не думает над архитектурой, и пишет ковбойский код. И этот факт находит отражение в языке, потому что каждый язык -- отражение взглядов его автора.
                        Если автор в 38 лет не понимает почему глобальные переменные --- это плохо, то очевидно что и в языке у него будут глобальные переменные.
                        Если он не понимает зачем нужны фреймворки -- то и фреймворков в языке нормальных не будет.
                        Ответить
                        • Прочитал. Он не говнокодит.

                          Он говорит такие вещи: разбивай программу на маленькие кусочки, ты можешь их потом разнести на несколько серверов.
                          (Слова не мальчика, но мужа).

                          Он говорит, что компоненты должны быть разделены.

                          Также у него есть примеры, где в перемешку PHP и HTML, но он пишет, что юзать PHP в HTML надо мало: использовать только простые вызовы функций, циклы и выводы.

                          То есть в этом случае он использует PHP как шаблонизатор.

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

                          ====

                          Вообщем мысли у него правильные есть.
                          Ответить
                          • >>Прочитал. Он не говнокодит.
                            add_c.inc -- христоматийная, нетесриуемая говнокаша из логики и HTTP.

                            >>Он говорит такие вещи: разбивай программу на маленькие кусочки, ты можешь их потом разнести на несколько серверов.
                            причем каждый кусочек он предлагает вынести в отедельный файлик.
                            Он просто не знает, что кластеризация должна делаться уровнем выше, а не распихиванием файликов по разным серверам. Джависты знают, дотнетчики знают, а он не знает.
                            Он так же говорит что не надо все пускать через один контроллер.
                            конечно. сайт должен состоять из 100500 файликов index.php, разложенных по разным папочкам)

                            >>. Чем потратить кучу времени на допиливание чужих фреймворков, лучше потратить время на свой фрэймворк

                            конечно, лучше изобрести очередной велосипед. Вот такой метод каждый программист должен писать сам и с ноля:
                            protected function fatal_error($msg) {
                                echo "<pre>Error!: $msg\n";
                            ...

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

                            >>Вообщем мысли у него правильные есть.
                            Да у него одна строчка "$this->fatal_error($e->getMessage());" четыре раза повтояется! Он когда нить слышал, что копипаст -- это запах?

                            А вот это вообще пзц:
                            if($_SERVER['REQUEST_METHOD']=='POST') {
                              header("Content-type: application/json");

                            удобно наверное такой контроллер тестировать.

                            А про JS код cо строками типа
                            var descElem = document.getElementById('desc_'+target.name);

                            литерал 'desc_', который у нас в commons!!
                            а потом он же в пыхе (в контроллере):
                            foreach($_POST as $k=>$v) {
                                if(substr($k,0,5)=="desc_") {
                                  if(isset($_POST[substr($k,5)]) && $_POST[substr($k,5)]==$v) {
                                    echo json_encode(array('validate_error'=>'f_'.substr($k,5)));
                                    exit;
                                  }
                                }

                            за одно "validate_error'=>'f_'.substr($k,5)" на говнокод можно.
                            Ответить
                            • это всё дерьмо. Он же говорит, что он упростил код для понимания.
                              Ответить
                              • тогда о чем его пост?
                                о том, что мне не нужен фреймворк, потому что я напишу сейчас все сам?
                                Ответить
                            • Я сам НЕ за велосипеды.
                              Также я недавно стал склоняться к тому, что нужен один файл, который разруливает. Типа как в Catylyst

                              Насчёт уровня выше не знаю, может как раз написание кода в разных файликах, помогает потом средству расспараллеливания.
                              Ответить
                              • >>Также я недавно стал склоняться к тому, что нужен один файл, который разруливает. Типа как в Catylyst
                                ну вот видите)))

                                Это же очевидно: у запроса должен быть конкретный workflow, что бы можно было его логировать, снимать статистику, добавлять секурити, кешировать итд...

                                кроме того в системе должно быть ОДНО место, знающее об HTTP.
                                Остальные места знать о нем не должны. Тогда они будут легко тестироваться.
                                А 500 файликов, в каждом из которых еще 10 include сверху -- это кошмар.

                                >>Насчёт уровня выше не знаю, может как раз написание кода в разных файликах, помогает потом средству расспараллеливания.
                                :))))) интересно -- как?
                                файлик addEntryToGuestBook.php у нас лежит на одном сервере, а listEntries.php -- на другом? И ссылки в HTML правильно проставлены на разные сервера))

                                Я вот запускаю свое приложение на десяти разных серверах, делаю им общее хранилище сессий (в базе) и ставлю перед ними енджин, который раунд-робином запросы на них отправляет.
                                И когда приходит еще 100500 человек -- я просто добавляю еще 10 машин (это т.н. "горизонтальное маштабирование").

                                а пыхопешники начинают патчтить пхп, патчить мемкешд итд (как это делают фейсбуки всякие)
                                Ответить
                          • > разбивай программу на маленькие кусочки
                            оленьи орешки?
                            Ответить
                          • > вообщем - ненависть!!!11
                            http://gramota.ru/slovari/dic/?lop=x&bts=x&zar=x&ab=x&sin=x&lv=x&az=x& pe=x&word=%E2%EE%EE%E1%F9%E5%EC
                            Ответить
                        • Добавлю. Он создал отдельный класс items, который соответствует таблице items.

                          А вот это хорошо! Потому, что базу ты можешь поменять на другую (перейти например на memcached), а остальной код не изменится.
                          Ответить
                        • > "зачем делать сложные фреймворки? все равно они за вас ничего не сделают, и надо все писать руками"
                          > (дескать все это хорошо для гостевой книги, но не для продукта, где 7 разработчиков)

                          правильно, на пхп даже с фреймоворком код говно. Поэтому, если ваша аппликашка далеко не гостевая книга, то не стоит мучаться с написанием своего фреймворка, а взять другую платформу и писать уже на ней
                          Ответить
                    • >"зачем делать сложные фреймворки? все равно они за вас ничего не сделают, и надо все писать руками"

                      тут он в чем-то прав.
                      например если выбирать между ORM и SQL.
                      но это моя личная позиция - как сторонника минимализма и любителя языка BrainFuck
                      Ответить
                      • там речь о фреймворках как таковых.
                        и конкретно об mvc)
                        и то, что в PHP до сих пор нет нормального collections api например -- именно об этом пренебрежении к фреймворкам и говорит
                        Ответить
                        • >и то, что в PHP до сих пор нет нормального collections api
                          тогда чур я не с ним!

                          >и конкретно об mvc)
                          вот кто оказывается главный любитель каши
                          Ответить
                        • > и то, что в PHP до сих пор нет нормального collections api
                          потому что в пхп нет коллекций как таковых. Ага, есть ассоц.массивы, но для них уже полно array_* функций.

                          Мои претензии к языку:
                          1. почему выражения не клеятся, как в перле, то есть нельзя написать типа $f()[0]->$a['a'];
                          2. нет нормальной обьектной модели (чехарда с неймспейсами, наследованием, полиформизмом,областью видимости)
                          3. отсутствие статической типизации наравне с динамической (то есть почему сигнатуру я могу определить как function f(A $a, B $b), но не могу сделать то же самое с переменными и полями, как: var A $a; и var $v; )
                          4. ужасный рефлекшн
                          5. непоследовательный синтаксис (те же $this и parent::) и унаследованы излишне громоздкие конструкции с++, типа стрелок и двойного двоеточия

                          ведь это не противоречит нелюбви к фреймворкам )
                          и мы бы получили гораздо более красивый и удобный язык на той же платформе.
                          хм... Наверное мы бы тогда получили groovy = )
                          Ответить
                          • � �. Оу! Похоже Говнокод разрезает длинные строки прямо попёрек utf-8-ского символа!
                            Говнокод!
                            Ответить
                            • Узнаю тебя, родная земля!
                              Я тоже это замечал. Если бы не было говнокода, сайт не оправдал бы своё название.
                              Ответить
                            • это давно уже замечено
                              Ответить
                              • прошёлcя пони и всем наставил минусов.
                                Ответить
                              • Может это месть того, кто говорил
                                "Где здесь С++?" ?
                                Ответить
                                • Это не месть, а искренняя забота о разнообразии эмоционального фона дискуссии, чтобы нам не скучно было. Think positive ^_~
                                  Ответить
                                  • Правильно ли я понимаю, что тот кто минусовал, сейчас себя выдал?
                                    Ответить
                                    • о_О Нет. Это смесь попытки постебаться над минусовавшим и намекнуть, что не стоит придавать этому большого значения. Как-то да, двусмысленно получилось. В реале бы лучше прокатило.
                                      Ответить
                                      • а я думаю, что это все неуемная юношеская гиперсексуальность... потипу троллизма
                                        Ответить
                                      • ну хорошо
                                        Ответить
                                        • не уверен, что это я минуснул, но за баттхёрт в любом случае спасибо :-)
                                          Ответить
                                          • "не уверен, что это я минуснул"
                                            На воре шапка горит.
                                            Ответить
                                            • шапка? верхняя шапка?
                                              Ответить
                                              • варежка
                                                http://img1.liveinternet.ru/images/attach/b/3/16/930/16930419_IMG_4661.JPG

                                                или шапочки для двойняшек
                                                http://saccharineirony.files.wordpress.com/2007/12/men_bra1.jpg
                                                Ответить
                                                • а для нижней части спины что-нибудь есть? желательно из горючих материалов
                                                  Ответить
                                          • хотя не знаю, может вы не пони, который минусует... а человек )
                                            Ответить
                        • Теперь есть, но стало еще хуже
                          Ответить
            • Потому что,
              Расмус Лердорф — датский программист (ныне живущий в Канаде)
              Ответить
              • Расмус Лердорф - неизлечимый наркоман, употребляющий PHP.
                Ответить
                • или троль, что не исключает всего остального. ы
                  Ответить
            • да-да, читайте)
              тоже будете знать, что фреймворки не нужны, зато нужно хардкодить обращение к статическим классам и глобальным переменным, и урлы генерировать прямо в логике, что бы код был нететируемым
              Ответить
              • Я за фрэймворки. Просто хочется узнать говнокодит ли Расмус.
                Ответить
                • Он давно уже не $писал. Разве на зарплату PHPшника возможно переехать в тёплые края?
                  Ответить
        • > Я недавно испытал дикий багор
          Первый багор в базе «НГК», между прочим.
          Ответить
        • Кстати, а ведь это — ответ на Извечный Вопрос: какой багор — дикий!
          Ответить
    • Этот design pattern явно перемудрили! Можно сказать, что это профессионально написанный говнокод!
      Ответить
    • логика в перемешку с header("HTTP/1.1 404 Not Found"); тоже круто

      теперь понятно, почему в официальной доке по питону написано про юнит-тесты< а в доке по пыху -- нет
      Ответить
    • Не говно.
      Автор покажи как надо. И на примере mzz!
      ====
      я, когда выкладывал код с говнокода, не был так быстр в решениях.
      Ответить
      • protected function copypaste($template, $values)
            {
              $out = '';
              $template = explode('%value%', $template, 2);
              
              for ($j = count($values), $i = 0; $i < $j; ++$i)
              {
                $out .= $template[0].$values[$i].$template[1];
              }
              
              return $out;
            }
            
            protected function composeResolvers()
            {
                return eval
                (
                    $this->copypaste
                    (
                        'require_once systemConfig::$pathToSystem . \'/resolver/%value%.php\';',
                        array('init', 'templateMediaResolver', 'moduleMediaResolver', 'extensionBasedModuleMediaResolver')
                    )
                    .'$baseresolver = new compositeResolver();'
                    .$this->copypaste
                    (
                        '$baseresolver->addResolver(new fileResolver(systemConfig::$pathTo%value% . \'/*\'));',
                        array('Application', 'WebRoot', 'System')
                    )
                    .'$resolver = new compositeResolver();'
                    .$this->copypaste
                    (
                        '$resolver->addResolver(new %value%MediaResolver($baseresolver));',
                        array('templateMedia', 'moduleMedia', 'extensionBasedModuleMedia', 'classFile')
                    )
                    .$this->copypaste
                    (
                        'if (function_exists(\'%value%\')) {%value%($resolver, $baseresolver);}',
                        array('external_callback')
                    )
                    .$this->copypaste
                    (
                        'return new cachingR%value%($r%value%, \'r%value%_media_cache\');',
                        array('esolver')
                    )
                );
            }
        Ответить
    • метаговнокод?
      Ответить
    • так вот почему мы так долго не дожидаемся обещанных изменений
      Ответить
      • Нет, я просто чуть-чуть занят сейчас, но говнокодом иногда занимаюсь :)
        Ответить
    • В чем говнокод? :)
      Ответить
      • В том, что контара спалилась!!!11адиадин
        Ответить
        • Что за контора и в чем спалилась?
          И про какую копипасту речь? Видите где-то одинаковые строчки?
          Ответить
    • Боюсь ошибиться, но разве это не стратегия?
      Ответить

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