Полезность загрузки экземпляров в OO PHP? - PullRequest
3 голосов
/ 04 ноября 2010

Меня попросили сделать проект на PHP и убедиться, что он ориентирован на объект.Я сделал OO, и я сделал PHP, но никогда оба.

Основным преимуществом OO PHP (вне наследования / полиморфизма) является организация кода.Все в порядке;Я делаю это.Но я застреваю, если мне нужно создавать экземпляры для каждого «объекта».

Для меня (и, может быть, я здесь наивен), веб-приложение предназначено для выполнения очень коротких запросов без сохранения состояния.изменять или извлекать записи в базе данных.Объекты не могут сохраняться между запросами.Поэтому довольно бессмысленно загружать данные из базы данных, создавать объект из этих данных, делать небольшие обновления, сохранять данные из объекта обратно в базу данных и затем выбрасывать объект.Загрузка / сохранение кода, кажется, много работы даром.[пояснение: пустая трата времени на разработку, а не на обработку ... не слишком заботясь о накладных расходах]

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

Ответы [ 4 ]

6 голосов
/ 04 ноября 2010

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

Я не думаю, что настойчивость как-то связана с этим.

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

2 голосов
/ 04 ноября 2010

Синглтоны - это, по сути, просто глобальные переменные с добавленным сахаром пространства имен. Есть несколько основных преимуществ программирования с объектами и классами, которые вы просто не получаете от простого процедурного программирования.Одним из них является наследование, как вы упомянули.Другим является пространство имен - у вас может быть код для сжатия лота в один включаемый файл (более понятный в интерпретируемых языках, таких как PHP, чем в скомпилированных языках).

Объекты - это, по сути, набор функций с общим состоянием(хотя синглтоны делают это глобальным состоянием. Остерегайтесь.) Как вы указали, преимущество в основном заключается в том, что это состояние прозрачно разделяется функциями без необходимости явно передавать его при каждом вызове.Если у вас есть различные функции для каждого запроса, работающие с общими данными, и вы хотите, чтобы они были специализированными формами общего набора функций, OOP, вероятно, хорошо подойдет.

Поскольку вам было поручено "убедиться, что это объекториентированный ", я бы потратил некоторое время на рассмотрение общих групп функций, их обобщений и т. д.

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

2 голосов
/ 04 ноября 2010

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

Моя рекомендация: Без жира .

Он крошечный, простой ибыстро перейти к минимальной жизнеспособной версии вашего продукта.Он имеет все, что вам может понадобиться (Caching, ORM, CRUD, Captcha ...) и настолько гибок, что вы можете использовать любой шаблон с вашей собственной иерархией каталогов.

Ознакомьтесь с подробной документацией.Единственная проблема заключается в том, что для этого требуется PHP 5.3.Я думаю, что это разумно, учитывая варианты и гибкость, которые он предлагает.Это действительно меняет способ работы;Вы должны окончательно дать ему шанс.

1 голос
/ 04 ноября 2010

Как и большинство вещей в жизни, ответ где-то посередине.

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

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

...