LINUX.ORG.RU
 
Igron

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


0

2

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

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

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

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


[#]  
urxvt

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

*** ()
[#] Ответ на: комментарий от urxvt 26.10.2011 23:19:47  
Igron

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

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

***** ()
[#] Ответ на: комментарий от derlafff 26.10.2011 23:25:40  
maxcom

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

***** ()
[#] Ответ на: комментарий от maxcom 26.10.2011 23:26:25  

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

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

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

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

* ()
[#]  
PolarFox

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

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

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

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

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

**** ()
[#] Ответ на: комментарий от derlafff 26.10.2011 23:25:40  

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

_________

//wfrr

anonymous ()
[#] Ответ на: комментарий от trashymichael 27.10.2011 1:27:22  

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

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

** ()
[#] Ответ на: комментарий от JFreeM 27.10.2011 4:30:11  
SteveBallmer
>>-----Цитата---->>

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

<<-----Цитата----<<

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

()
[#] Ответ на: комментарий от xpahos 27.10.2011 1:00:22  
SteveBallmer
>>-----Цитата---->>

CodeIgniter еще есть.

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

<<-----Цитата----<<

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

()
[#] Ответ на: комментарий от SteveBallmer 27.10.2011 7:37:59  

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

*** ()
[#] Ответ на: комментарий от JFreeM 27.10.2011 9:14:09  
SteveBallmer

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

>>-----Цитата---->>

Пользовательскому вводу невозможно через 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 веб-фреймворков. :)

()
[#] Ответ на: комментарий от JFreeM 27.10.2011 9:14:09  
SteveBallmer

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

()
[#] Ответ на: комментарий от SteveBallmer 27.10.2011 9:25:16  

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

*** ()
[#] Ответ на: комментарий от JFreeM 27.10.2011 10:32:27  
stevejobs

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

** ()
[#] Ответ на: комментарий от stevejobs 27.10.2011 11:19:38  

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

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

anonymous ()
[#]  

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

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

* ()
[#] Ответ на: комментарий от ggrn 27.10.2011 16:44:50  

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

* ()
[#] Ответ на: комментарий от stevejobs 27.10.2011 11:19:38  
KRoN73

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

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

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

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

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

***** ()
[#] Ответ на: комментарий от KRoN73 27.10.2011 17:30:53  

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

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

anonymous ()