LINUX.ORG.RU

[php] Как избавиться от «быдлокода»?

 


0

1

Здравствуйте.

Есть проблема: почти все сайты, что попадают ко мне на «допиливание» представляют из себя адскую смесь из php и html: в одном месте и оформление, и содержание, и логика, и даже пользовательские формы.

Да чего уж там говорить, когда я сам начинаю что-то писать с нуля, через некоторое время оказывается, что мои творения тоже обрастают вышеназванными проблемами и становятся плохо пригодны для сопровождения. Хотя как таковой код я пишу неплохой: ошибки и ворнинги никогда не вываливаются, переменные тщательно проверяются, пользовательские данные заботливо экранируются и т.п.

Собственно, вопрос: есть ли какое-нибудь учебное пособие (или статья) по переводу такого вида сайтов в нормальный вид, пригодный для дальнейшей поддержки?

★★★★★

ИМХО, готовый продукт уже не исправить.
А когда начинаешь писать проект с нуля то заюзай какой-то фреймворк. Он позволит увидеть некоторые существующие решения.

urxvt ★★★★★
()
Ответ на: комментарий от urxvt

> А когда начинаешь писать проект с нуля то заюзай какой-то фреймворк.

А какие-нибудь предпочтения есть? (Не монстрообразные только.)

Igron ★★★★★
() автор топика
Ответ на: комментарий от Igron

CakePHP это первое что вспоминалось, я давно уже не пишу на php. Возможно сейчас уже в моде что-то другое

maxcom ★★★★★
()
Ответ на: комментарий от derlafff

Если целевой язык больше никто не использует для веб-разработок то, думаю и не стоит начинать. По крайней мере без опыта и знания mainstream методов разработки.

maxcom ★★★★★
()
Ответ на: комментарий от maxcom

Извиняюсь за каламбур, но, имхо, cake уже не торт. Да и собственно был он тортом очень непродолжительное время, потому что был одним из первых. CakePHP 2 вышел пару недель назад, но он уже морально устарел на 3-4 года. Они только-только отказались от поддержки PHP4, нет никаких нэймспейсов, нормального подхода к autoload'ингу, модульности и Di - всё то, что уже давно является мэйнстримом в области PHP фрэймворков. Ну и вдобавок скудная документация и не самое большое коммьюнити.

Я думаю ТС можно обратить внимание на Symfony2, Zend Framework (и постепенно следить за разработкой Zend 2, где весьма доходчиво разбирают недостатки первого ZF) или какой-нибудь Yii.

В любом случае, используя даже CakePHP, хуже не будет - очень много узнаете о подходах к реализации контроллеров, рутинга, шаблонах и увидите зачем собственно нужен в PHP ООП и как его готовить. Организация бизнесс логики, правда, уже совсем другая, более обширная и серьезная тема.

P.S. А вот микро-фреймворков типа PHP Fat Free или Prado лучше избегать - слишком велики шансы нагородить своих велосипедов и скатиться незаметно в УГ.

BobiKK
()

Есть два варианта

1) Не писать на похапе и использовать фреймворки

1.1) Не писать на похапе и написать фреймворк самому

2) Писать на похапе и использовать фреймворки

2.1) Писать на похапе и написать фреймворк к нему самому

PolarFox ★★★★★
()
Ответ на: комментарий от derlafff

написать свой, php достаточно неплохой язык для всяких затейств, только бронированные штаны одень.

_________

//wfrr

anonymous
()
Ответ на: комментарий от anonymous

> А с чего взял, что крутой?
Кричали на нем на каждому углу, ну я и на дер^Wрекламу повелся.

urxvt ★★★★★
()
Ответ на: комментарий от KRoN73

Подпункты просто уточняют два варианта, никоим образом не противореча им.

PolarFox ★★★★★
()
Ответ на: комментарий от trashymichael

А если использовать голову что лучше?..

Ок. В интернетах стало на одного заблуждающегося в своем мнении человека меньше :) Удачи.

xpahos ★★★★★
()

>пользовательские данные заботливо экранируются
бедные, бедные PHP-девелоперы.

JFreeM ★★★☆
()
Ответ на: комментарий от JFreeM

бедные, бедные PHP-девелоперы

Немного не понял сарзказма. В Джава-фреймворках разве все не так же работает, как и в PHP-фреймворках?

SteveBallmer
()
Ответ на: комментарий от xpahos

CodeIgniter еще есть.

Если вообще использовать MVC, то смотреть лучше в сторону Ruby/Python.

Не распарсил. Что, CodeIgniter, Yii и Symfony2 уже не MVC-фреймворки? 0_o

SteveBallmer
()
Ответ на: комментарий от SteveBallmer

конкретно в плане экранирования пользовательских данных для защиты от SQL Injection - да, немного по другому. Пользовательскому вводу невозможно через JPA пройти в SQL запрос. Я уже забыл, что такое - валидация пользовательских данных руками. Проставил аннотации - и все. Одна аннотация @MaxLength(20) и все - у меня есть все, от js валидации на форме до varchar(20) в базе. Как-то вот так http://java.sun.com/developer/technicalArticles/J2SE/constraints/diag1_sm.jpg только сейчас все это развилось еще более.

JFreeM ★★★☆
()
Ответ на: комментарий от JFreeM

Ну Джава то понятно, но.

Пользовательскому вводу невозможно через JPA пройти в SQL запрос.

Вот в Yii, к примеру, пользовательский ввод по умолчанию тоже никак пройти в SQL через AR-модель не может. Правила валидации обязательны. Если уверен, что поле безопасно, то надо явно его так и пометить (правило валидации под названием safe есть).

Я уже забыл, что такое - валидация пользовательских данных руками.

Я тоже. И программирую на PHP. Yii сам все генерирует на клиент-сайде (валидация на JS на клиенте), сам передает по мере изменения значений данные на сервер (валидация на сервере), сам валидирует при окончательном сабмите формы на сервер.

В контроллере около 10—15 строк, в модели около 30—60. Вполне нормально.

Проставил аннотации - и все. Одна аннотация @MaxLength(20) и все - у меня есть все, от js валидации на форме до varchar(20) в базе.

Symfony2 более того позволяет не только в аннотациях модели/формы правила валидации указывать, но и в YML или XML файлах.

Собственно к чему это я все расписал? Выражение:

бедные, бедные PHP-девелоперы

Как-то прямо аццки в глаза бросается, учитывая то, что Symfony2 — это калька на 60—70% со SpringMVC и других Java веб-фреймворков. :)

SteveBallmer
()
Ответ на: комментарий от JFreeM

Хотя конечно, если речь шла о людях «я весь такой крутой пишу свою CMSку и мегадвиг, который затмит все существующее», то претензий к «бедные-бедные PHP девелоперы» не имею. :-) Велосипеды где-где, а в вебе не особо то и нужны.

SteveBallmer
()
Ответ на: комментарий от SteveBallmer

это здорово, что для PHP существуют такие инстументы. В таком случае, PHP девелоперы не бедные-бедные. Просто я сужу по вопросам, которые поднимаются в темах о PHP. Видимо, большинство просто не знает того, о чем Вы написали.

JFreeM ★★★☆
()

Use Symfony и прочие рельсы

stevejobs ★★★★☆
()
Ответ на: комментарий от JFreeM

Да не нужно оно им просто... У мну друг занимается сайтописательством на PHP. В день умудряется наколбасить несколько(!) сайтов, разбавляя Друпал быдлокодом. Просто есть какие-то зарекомендовавшие себя паттерны быдлокода, которые и проверять-то не обязательно. Например, валидация на sql-injection делается копипастой кода, написанного много лет назад. Введение туда каких-то новых вещей, ориентированных на качество, мгновенно снизит скорость разработки в разы.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

>делается копипастой кода, написанного много лет назад.

есть мнение, что копипаста - наиболее эффективный метод повторного использования кода

anonymous
()

use codeigniter luke, man mvc

ggrn ★★★★★
()

Codeigniter - не удобное старьё
Kohana , форк первого - вродебы нормально.
Symfony - для интерпрайза
Yii - как для мелких сайтов, так и для крупных.

Используем Yii.

impr
()
Ответ на: комментарий от blackst0ne

Python? Какой? Второй ветки?

Я не уверен в 100% работе всех известных мне библиотек на Python 3.

xpahos ★★★★★
()
Ответ на: комментарий от ggrn

> Codeigniter что вообще ужс?
А чем ещё может быть фрэймворк на php4?
Конструктор sql не удобный, работа с view из 90ых. То, что они называют моделями, таковыми не являются.

impr
()
Ответ на: комментарий от stevejobs

>Например, валидация на sql-injection делается копипастой кода

OMFG. А ORM сделать за столько времени (или освоить имеющийся) не судьба? :) Я тоже сейчас компоненты новых сайтов делаю за минуты, фактически копированием 5-6 файлов и заменой в них названия проекта, но эти файлы размером по 5-10 строк и в них только описания структуры. Ну, файлы с HTML-шаблоном побольше и вот их, да, приходится чуть редактировать, стили заказные дизайнерские обычно отличаются :)

Введение туда каких-то новых вещей, ориентированных на качество, мгновенно снизит скорость разработки в разы.

Ну да. Даже хуже бывает. Если вместо типового модуля новостей потребуется подключить какой-то специфический с нуля писуемый модуль, скажем, анонсов, то на это потребуется не 10 минут (включая вёрстку, тесты, настройку прав доступа), а час :)

Вот что у меня реально дофига времени отнимает — это сложные системы прав доступа (скажем, предварительное создание статьи копирайтером, отсылка на модерирование редактору, от него или публикация, или возврат на дработку), или хитропопый AJAX, или просто главные страницы с навороченной логикой многих модулей вывода с перекрёстными связями… Тут иногда несколько дней возиться приходится.

KRoN73 ★★★★★
()

http://4pda.ru/forum типичный образчик php форума, опять висит, за эту неделю наверное каждый день висел по несколько часов

Karapuz ★★★★★
()
Ответ на: комментарий от anonymous

Все равно не откроется. Доступ только для Вьетнама.

VirRaa ★★★
()
Ответ на: комментарий от KRoN73

>А ORM сделать за столько времени (или освоить имеющийся) не судьба? :)

Не панацея же. Особенно в описанном выше варианте «от js валидации на форме до varchar(20) в базе». Ты же сам прекрасно понимаешь, какой объем садового инвентаря идет в этой искаропке.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.