Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Слишком большая цена ООП в PHP 
:(
    Опции темы
Dima50
Дата 25.8.2009, 11:54 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.10.2007

Репутация: 1
Всего: 2



Привет

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

Особенно красиво Получается агрегация: есть Объект одного класса содержащий кучу ссылок на объекты другого класса. 
Когда программа "перманентно" находится в оперативной памяти (как приложения GUI на десктопе), один раз срабатывают конструкторы, а дальше уже с существующими объектами работаешь. Можно их перемещать из "контейнера" в "контенер", манипулировать "контенерами" и так далее. 
Все в памяти, все под рукой. + Удобная понятная структура.

Но вот в PHP скрипт у нас срабатывает по запросу пользователя. При каждом переходе по ссылке нет возможности перенести ООП структуру, ее надо формировать с 0, вызывая все конструкторы давая запросы базе данных и так далее. В Сессии ее не всегда перенести удастся. Выглядит слишком дорого, и черезменро усложнено.

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

Тогда же как в программах постоянно висящих в памяти, как я уже говорил удобно и красиво обращаться системами На ООП .


Что собственно нужно:

Нужны книги, статьи или советы про то как проектировать ООП приложения под PHP.

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

Суь программы:  написать сайт где пользователь получает задание в виде набора страниц для посещения. Надо засечь время проведенное на каждой странице, а также сохранить тесты вполенные на ней.  

Сей час думаю как эту задачу поделить на классы и объекты для реализации.




 

Это сообщение отредактировал(а) Dima50 - 25.8.2009, 13:12
PM MAIL   Вверх
NewDima
Дата 25.8.2009, 12:07 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 922
Регистрация: 20.2.2006
Где: <?here?>

Репутация: 10
Всего: 12



php заточен для использование в web, протокол (http) и специфика взаимодействия клиента и сервера не заточены под такое использование классов, о котором вы говорите (десктопно).
А вопроса по существу я не увидел, кроме задачи. Но ее конечно же никто не будет решать за вас
PM ICQ   Вверх
icewind
Дата 25.8.2009, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



С таким подходом и правда лучше не использовать ООП... И почему же работать с полями класса хуже чем с массивом? Основное внимание нужно обращать не на то, сколько вызывается конструктор, а на то какой объем информации будет передан классу и как он с ней будет работать. 


Цитата(Dima50 @  25.8.2009,  11:54 Найти цитируемый пост)
вызывая все конструкторы давая запросы базе данных

А с отказом от ООП удастся избавится от запросов к базе?
Цитата(Dima50 @  25.8.2009,  11:54 Найти цитируемый пост)
Гораздо экономней получить по запросу то что надо и отдать это пользователю. 

откуда такие данные? В чем экономия?


--------------------
user posted image
PM MAIL Skype   Вверх
Dima50
Дата 25.8.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.10.2007

Репутация: 1
Всего: 2



Цитата(icewind @  25.8.2009,  12:27 Найти цитируемый пост)
откуда такие данные? В чем экономия? 


Есть класс пользователь. Надо вывести пользователей зарегестрированых в системе. 

Быстрей сделать запрос к бд, вывести имена пользователей. Чем на основе запроса БД формировать обьекты для каждого пользователя. А потом проходить по созданым обьектам и вызывать метод печати имени (или ссылки) для каждого обьекта.



PM MAIL   Вверх
MoLeX
Дата 25.8.2009, 12:51 (ссылка)  | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



 smile 


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
bars80080
Дата 25.8.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(Dima50 @  25.8.2009,  12:44 Найти цитируемый пост)
Чем на основе запроса БД формировать обьекты для каждого пользователя. А потом проходить по созданым обьектам и вызывать метод печати имени (или ссылки) для каждого обьекта.

а вы не делайте так. сформируйте объект, сделайте запрос и выдайте список
PM MAIL WWW   Вверх
Ипатьев
Дата 25.8.2009, 13:32 (ссылка)  | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 28
Всего: 37



Объект какого класса? 
PM MAIL   Вверх
Dima50
Дата 25.8.2009, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.10.2007

Репутация: 1
Всего: 2



Цитата(bars80080 @  25.8.2009,  13:27 Найти цитируемый пост)
а вы не делайте так. сформируйте объект, сделайте запрос и выдайте список


Ты имеешь ввиду сформировать один объект Пользователь. Получить набор строк из БД где и каждую строку подставлять в этот обьект.
Вместо того чтоб использовать множестов обьектов класса Пользователь.

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


Сей час в чем хочется доскональна разобраться:
  • В том как разделять задачу на классы без избыточности для ПХП. 
  • И использовать полную мощь ООП ПХП.

Кстати использую для работы Code Ignitor.
 


Это сообщение отредактировал(а) Dima50 - 25.8.2009, 14:01
PM MAIL   Вверх
MoLeX
Дата 25.8.2009, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(Dima50 @  25.8.2009,  13:56 Найти цитируемый пост)
И использовать полную мощь ООП ПХП.

тогда не используй

Цитата(Dima50 @  25.8.2009,  13:56 Найти цитируемый пост)
Code Ignitor.




--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Dima50
Дата 25.8.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.10.2007

Репутация: 1
Всего: 2



Цитата(MoLeX @  25.8.2009,  14:06 Найти цитируемый пост)
тогда не используй

Поясни

Это сообщение отредактировал(а) Dima50 - 25.8.2009, 14:58
PM MAIL   Вверх
bars80080
Дата 25.8.2009, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(Dima50 @  25.8.2009,  13:56 Найти цитируемый пост)
Ты имеешь ввиду сформировать один объект Пользователь. Получить набор строк из БД где и каждую строку подставлять в этот обьект.
Вместо того чтоб использовать множестов обьектов класса Пользователь.

нет, я говорю: сделай один объект подключения к БД, один метод для запрос выборки и вызови один метод построения списка пользователей
PM MAIL WWW   Вверх
amazing
  Дата 25.8.2009, 17:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


царапка



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 27.8.2008
Где: Каменск-Уральский

Репутация: 2
Всего: 14



Цитата(Dima50 @  25.8.2009,  13:56 Найти цитируемый пост)
    * И использовать полную мощь ООП ПХП.


Кстати использую для работы Code Ignitor.

но CI как раз ориентирована на РНР4-5 (больше на 4рку) и всех прелестей ООП не предусматривает (с 5той версии ООП в рнр начинает нормально развиваться) 
PM MAIL   Вверх
IZ@TOP
Дата 25.8.2009, 18:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Dima50, мне кажется, вам для ваших целей ORM нужна. Это несколько более отдаленная (продвинутая/сложная) тема от среднестатистического веб-строительства.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Dima50
Дата 25.8.2009, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.10.2007

Репутация: 1
Всего: 2



Цитата(bars80080 @  25.8.2009,  17:39 Найти цитируемый пост)
нет, я говорю: сделай один объект подключения к БД, один метод для запрос выборки и вызови один метод построения списка пользователей 

Понятно. 

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

Нужны качественные источники по проектированию систем именно для PHP, в которых на примерах излагается где нужно и своевременно использовать наследование, refleciton, интерфейсы.

Добавлено через 12 минут и 42 секунды
Цитата(amazing @  25.8.2009,  17:59 Найти цитируемый пост)
но CI как раз ориентирована на РНР4-5 (больше на 4рку) и всех прелестей ООП не предусматривает


Да, CodeIgniter совместим с php4. Но разве это мешает в собственных классах использовать возможности php5?
PM MAIL   Вверх
Dima50
Дата 25.8.2009, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 20.10.2007

Репутация: 1
Всего: 2



Цитата(IZ@TOP @  25.8.2009,  18:22 Найти цитируемый пост)
Dima50, мне кажется, вам для ваших целей ORM нужна. 


Спасибо за толковый совет. В этом направление не смотрел даже.

PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0877 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.