2010-07-11 4 views
3

Я работаю над довольно большим PHP-проектом, написанным в процедурном стиле (он был написан до PHP 5), и я не могу не чувствовать, что некоторые из вещей, которые я делаю, немного «хаки». Модификация в другом месте может легко сломать приложение. Все шаблоны проектирования и лучшие практики, которые я видел, похоже, применимы только к ООП. Я мог бы начать писать некоторые из моего кода, используя функции ООП PHP 5, но я не уверен, что все остальные разработчики достаточно знакомы с ООП.Дизайн шаблонов и инкапсуляция для процедурного программирования?

Является ли только процедура процедурного программирования казаться «хакерским» для людей, более знакомых с ООП? Существуют ли «лучшие практики» книг, в которых рассматриваются способы сохранения больших процедурных приложений и снижение вероятности появления новых ошибок?

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

+0

Отметьте это сообщение: http://stackoverflow.com/questions/2492446/design-principles-best-practices-and-design-patterns-for-c-or-procedural-progr –

ответ

6

Процедурное программирование, особенно на PHP, не имеет конкретного понятия «инкапсуляция» - все доступно, просто не ваша работа должна его модифицировать, поэтому вы этого не делаете. Тем, кто ничего не знает, кроме ООП, или учили, что процедурный код BAAAAAAD, да, он может выглядеть хаки и неправильным. Но люди делают это в течение долгого времени, и это действительно работает.

Теперь так же вероятно, что вы нашли некоторые из НЕПОСРЕДСТВЕННО неправильного процедурного кода. Там столько же, сколько есть плохой код ООП.

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

0

Мой процедурный код выглядит довольно OOish. Довольно часто у меня есть функции, которые проходят вокруг составной структуры, например. $ Стр. И это упростит переход любой set_title ($ page, $ title) в $ page-> set_title ($ title), если это необходимо. Это просто отличная нотация, нет практической разницы в том, что делают методы.

Дизайн шаблонов является широкое поле. Конечно, есть вещи, которые будут выглядеть глупыми, если они будут применены к процессуальному кодексу. И, откровенно говоря, некоторые шаблоны проектирования ООП тоже не очень чувствительны в коде на основе классов. Но если есть явный вариант использования для перезаписи вашей наследуемой базы кода, попробуйте. Я сомневаюсь, что ваши коллеги-сопрограммисты имеют аллергию на объектно-структурированные интерфейсы.

Звучит так, как будто проблемы в вашем приложении проистекают из преклонного и извилистого строения. Если он был написан в стиле PHP3, например. все еще использует $ HTTP_GET_VARS, тогда не пытайтесь. Если это, однако, только глобальные переменные и inderdependent состояние кода, то приведение некоторой объектной структуры выполнимо.

PS: Глобальные переменные: Синглтоны в ООП - это слишком сложные глобальные переменные. В большинстве приложений требуется набор параметров конфигурации (только чтение, никогда не написанное). Они принадлежат глобальному объекту или массиву. Все остальное опасно.

+0

Можно сделать ООП, не сказав «класс» даже один раз. Пункт процедурного кода заключается не в том, что вы не используете классы; это то, что данные являются «чем-то манипулировать», а не объектами с идентичностью. GDK скорее объектно-ориентирован, и он написан на C. – cHao