Сегодня была поставлена задача - спарсить свежие базы по 8 типам транспортных средств с нескольких сайтов: типы, названия, марки. После чего добавить их на авто-портал с объявлениями с функцией автокомплита во всех формах этих значений.
Подумал - ничего сложного, сделаю быстро. Но не тут-то было
Открыл базу - таблица с 28 полями для объявления сразу насторожила... - вздохнул и подумал - ладно, добью ещё 2 поля new_mark new_model: когда закончу работу, удалю старые поля, оставив только новые, сведя к ним старые объявления либо снесу старые поля через месяц (марки и модели для новых объявлений будут писаться в новые поля).
Спарсил пухлые таблицы с новыми марками и моделями (марок автомобилей порядка 1200 моделей 7400+), что кратно больше старых вариантов этих списков портала. Записал таблицы в бд, проиндексировал и т.п.
Дальше началось самое веселое. Открыв исходники портала, той его части, которая отвечала за добавление объявлений был шокирован... Как такового раздела не было а в конечном index.php раздела boards красовалось:
По спине пробежал холодок... .
Открываю, собственно сам класс... . У вас когда-нибудь глючил gedit на 4 ядрах и 4 гигах?
Наверняка это бывало при попытках открытия очень тяжелого дампа бд или подобных вещей. Я порядком уже отвык от всяких зависаний, подумав, что наверняка что-то другое подвесило машину. Однако убедившись что именно редактор отожрал все ресурсы полез смотреть свойства файла с классом... . Вам случалось видить метровые файлы board.inc.php с одним классом внутри? - Мне нет.
Когда gedit отрендерил файл, не без тормозов начал читать код...
Плохо стало почти сразу.
Не буду детально рассказывать, что я там увидел: и так ясно. Пыха, понятно, не самый строгий к разделению логики от представления и т.п., - это понятно, но... мой include_once для autocomplite.php был единственным (!) инклудом, использующимся для вывода всего этого чертового раздела! Исключая
В котором 7 строк настроек и массивы и пары сотен значений моделей, марок и типов!!!
Все это настолько перекорежило, что дальше все объектные вызовы вроде
казались уже наглой издевкой автора, которого хотелось найти и задушить! А после этого ещё зажарить и утопить! Он ещё не поленился: в класс все это упаковал! Типа так и должно быть: "всё лаконично и аккуратно у меня!"... .
Уже тогда понял что разделениями, даже условными на логику, модели и шаблоны там и не пахнет... . Для каждого типа транспортного средства (8) в зависимости от действия (продажа, покупка, аренда, ...), каждого действия класса(!!!) (редактирование, выввод, добавление, удаление) это существо прописывало отдельную форму, отдельную обработку и отдельный запрос к бд!
Правда тут, все-таки выводил запрос в обертке $b->query("...")), собранной в конфиге - "Ну как же, я же крутой программист!". Представляете в какое развлечение превратилась бы простая на первый взгляд задача написать и подцеплять атокомпликт к этого многоэтажным switch case и сохранять конечный файл с тормозами и вылетами редактора?!
Решил наследовать класс, определив новый метод, который бы до вывода переопределял его этажные формы и запросы к базе, ту их часть, где есть выбор модели и марки транспорта, производя отдельное их сохранение и редактирование.
Проделав все это, с нервной дрожью обнаружил, что для некоторых типов тс нововведение почему-то не работает.
Потратив ещё с пол-часа обнаружил что некоторые типы тс, оказывается, не определены в конфиге!!! Они определены в самом классе!!! А для их отлова, обработки и записи, минуя семиэтажные switch case Бил Гейтс написа даже отдельный метод Listener и по Get-Post параметрам отдельно, отлавливал, редактировал и добавлял в базу объявления этих типов!!! Видимо Кулибину стало плохо искать концы в своем же коде и для добавления новых типов придумал отдельный метод в котором определил такую-же этажерку. Правильно, - после него хоть атомная война... .
В общем, пока с этим не столкнешься все это кажется очень смешно и весело, но когда эти животные (да, они животные!!!) берутся писать проекты серьёзнее собственной персональной страницы, получается вот такое убожество!
Никогда не пренебрегайте советами, выработанными хорошими методиками программирования! Используйте паттерны! Комментируйте свой код!!! Не пытайтесь изобразить ООП если вы не понимаете что это такое и как оно должно быть реализовывано!!! Программируйте лучше процедурно, но чисто и понятно!
Искрине сочуствую. Теперь я понимаю что у меня все удалось. Так как достался проект написан на Yii. Но там не так как у Ва все разделено(ето ж Yii), но бл* за каждую @ перед каждым
$_POST, $_GET, $_SESSION, $_REQUEST, $_COOKIE убил бы. Есть еще мелкие недочеты с архитектурой базы и прочее но ето не на столько критично
Zuldek пишет:В общем, пока с этим не столкнешься все это кажется очень смешно и весело
Я целый год на одном из предыдущих мест работы, разгребал такие горе-сайты.. Зубная клиника, пиломатериалы, детсткие праздники, пр.. Каждый из них - шедевр ГК, хоть весь код
выкладывай.
А еще, задумавшись чего ж так долго
грузится страница, мы долго ржали в голос с напарником, когда вывели сколько запросов к БД на обычной странице, делала наша корпоративная ЦМС - их там было 219!
Так что я все это прошел, копаясь в самой самой глубине колодца
На сладкое IE expression: