OO или процедурный PHP для веб-сайта?

Я собираюсь начать работу над своим самым первым проектом PHP - создание нового веб-сайта для небольшой некоммерческой организации. Прибывая из .NET и фона Java, объектно-ориентированное программирование происходит очень естественно для меня, но я не уверен, является ли это правильный подход для bulding веб-сайт умеренной сложности в PHP. Мое понимание - то, что большинство основанных на PHP сайтов записано главным образом в коде неOO.

Для веб-приложения я определенно пошел бы маршрут OO, но для довольно простого веб-сайта, я не так уверен. Сайт будет состоять приблизительно из пяти разделов, с одной - четырьмя страницами содержания на раздел, содержа статьи, новости, галереи изображений и несколько форм. Нет никакого сложного включенного взаимодействия (за исключением нескольких довольно простых веб-форм для того, чтобы написать статьи, комментарии, регистрацию, и т.д.), и никакая потребность поддержать состояние (за исключением логинов). MySQL будет использоваться для хранения данных.

Код не должен действительно быть особенно расширяем как таковой - это не веб-сайт предприятия или механизм шаблонной обработки, мы говорим о - но важно, чтобы код было довольно легко понять для программиста с достойной суммой опыта PHP. Я предполагаю, что большинство PHP программистов не привыкло к коду OO, поэтому возможно, это - одна точка в пользу процессуального кодекса?

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

Возможно, некоторый гибридный подход был бы лучшим, с помощью объектов для представления "бизнес-объектов" и т.д., но рендеринга HTML и т.д. с помощью традиционного, процессуального кода?

Комментарии значительно ценятся. - Rolf

13
задан Marcel Korpel 16 July 2010 в 10:03
поделиться

10 ответов

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

Читаемость кода связана не с парадигмой программирования, а с тем, как код написан. Я видел свою изрядную долю спагетти ООП (включая свою собственную), и я видел столько же процедурных беспорядков. Если код написан хорошо, даже тот, кто не обладает приличным объемом знаний PHP, должен иметь возможность следовать его указаниям.

Я предполагаю, что большинство PHP-программистов не привыкли к объектно-ориентированному программированию, так что, возможно, это один аргумент в пользу процедурного кода?

Я сомневаюсь в этом. Я был на нескольких конференциях, и ни у кого не было проблем с ООП. Фактически, я не увидел ни единой строчки процедурного кода. Кроме того, все основные фреймворки полностью ООП. Вы найдете процедурную парадигму в основном в приложениях PHP4 и при просмотре кода новичков.

Но чтобы ответить на ваш вопрос: я бы сказал, используйте объектно-ориентированный подход, если это то, что вам и вашим разработчикам нравится. Лично я считаю, что процедурный код в части просмотра - плохая идея, потому что вы, скорее всего, в конечном итоге смешаете логику и код представления для совершенно неподдерживаемых шаблонов. См. Шаблоны веб-презентаций POEAA для ознакомления с некоторыми более удобными в обслуживании подходами.

Вам не нужно использовать MVC, если вам кажется, что он слишком велик. Если хотите, используйте Page Controller. Но опять же, MVC не так уж сложно реализовать, и существует множество фреймворков , которые снимут с вас основную тяжесть работы.

11
ответ дан 1 December 2019 в 23:47
поделиться

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

PHP может реализовывать объектно-ориентированные проекты, но код, который вы пишете, будет не так хорош, как аналогичный код C # (и, возможно, Java, но я не знаю Java, чтобы комментировать).

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

С другой стороны, существует множество PHP CMS, которые уже созданы, например wordpress , Drupal и Joomla! , который может сразу удовлетворить ваши потребности.

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

3
ответ дан 1 December 2019 в 23:47
поделиться

Я хотел бы порекомендовать WordPress, а не писать код с нуля для довольно простого сайта.

Все, что вам нужно, это место на сайте и немного времени, чтобы научиться настраивать wp.

Посмотрите showcase

Если вы все еще хотите писать с нуля... лучше следовать ОО, возможно, вы можете использовать фреймворки, такие как Zend или Kohana

Будьте здоровы

2
ответ дан 1 December 2019 в 23:47
поделиться

Все зависит от вашей цели.

  • Если вы не хотите в дальнейшем расширять свой проект, то процедурный подход вполне подходит.
  • Если вы можете быстрее разработать часть кода, используя предопределенные объекты, то это то, что вам нужно.

  • Если вы можете просто записывать код сверху вниз без особых усилий, "процедурный" подход тоже подойдет.

2
ответ дан 1 December 2019 в 23:47
поделиться

Я бы определенно выбрал OO подход.

Вы можете использовать Zend Framework, спортивный и MVC и persistence framework. Или вы можете использовать некоторые более легкие и специализированные фреймворки, такие как doctrine для персистентности и, как мне кажется (но я не уверен), cakephp довольно легкий и хороший для MVC.

Не только повышается ремонтопригодность, но и сокращается время разработки, так что, на мой взгляд, это беспроигрышная ситуация!

0
ответ дан 1 December 2019 в 23:47
поделиться

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

0
ответ дан 1 December 2019 в 23:47
поделиться

Если это простой веб-сайт, и его содержимое не изменится так сильно, то я бы не стал осуждать кого-то, кто использует процедурный код вместо написания полного объектно-ориентированного решения (что может быть излишним). Например:

<?php
switch ($_GET['filename']) {
    case "news":
        require_once('inc/news.php');      // your news functions
        include_once('tpl/news.tpl.php');  // your news template
    break;
    case "events":
        require_once('inc/events.php');
        include_once('tpl/events.tpl.php');
    break;
    case "contact":
        require_once('inc/contact.php');
        include_once('tpl/contact.tpl.php');
    break;
    default:
        if ($_GET['filename']=="") {
            include_once('tpl/home.tpl.php');
        }
        else {
            include_once('tpl/page_not_found.tpl.php');
        }
    break;
}
?>

Вышеупомянутое в файле с именем index.php будет действовать как простой контроллер. Для небольших сайтов я использую аналогичную, хотя и немного более сложную настройку. Обычно у меня есть "бизнес-логин" в файлах в каталоге inc (например, inc / news.php будет содержать класс с методами для получения новостных статей и т. Д.), А затем шаблон файлы в каталоге tpl .

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

0
ответ дан 1 December 2019 в 23:47
поделиться

Я бы пошел с упом. Так будет проще, и вам придется меньше переписывать код на случай, если что-то случится :)

-1
ответ дан 1 December 2019 в 23:47
поделиться

Определенно иду с ОО.

Каким бы маленьким ни был ваш веб-сайт, его всегда лучше модифицировать / расширять с помощью объектно-ориентированного подхода.

Также я могу порекомендовать очень хороший и быстрый фреймворк:

http://www.yiiframework.com/

Полностью на PHP5 и OO :)

-1
ответ дан 1 December 2019 в 23:47
поделиться

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

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

0
ответ дан 1 December 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: