![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Dima50 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 78 Регистрация: 20.10.2007 Репутация: 1 Всего: 2 |
Привет
Очень удобно и легко разлагать суть вопроса на классы и объекты, такой стиль рассуждений похож на бытовой. Сразу проблема делиться на ассоциации (абстракции) из окружающего мира и решается сама собой. Особенно красиво Получается агрегация: есть Объект одного класса содержащий кучу ссылок на объекты другого класса. Когда программа "перманентно" находится в оперативной памяти (как приложения GUI на десктопе), один раз срабатывают конструкторы, а дальше уже с существующими объектами работаешь. Можно их перемещать из "контейнера" в "контенер", манипулировать "контенерами" и так далее. Все в памяти, все под рукой. + Удобная понятная структура. Но вот в PHP скрипт у нас срабатывает по запросу пользователя. При каждом переходе по ссылке нет возможности перенести ООП структуру, ее надо формировать с 0, вызывая все конструкторы давая запросы базе данных и так далее. В Сессии ее не всегда перенести удастся. Выглядит слишком дорого, и черезменро усложнено. Гораздо экономней получить по запросу то что надо и отдать это пользователю. Не выстраивая иерархии объектов каждый раз, жонглируя массивами с текстом. Тогда же как в программах постоянно висящих в памяти, как я уже говорил удобно и красиво обращаться системами На ООП . Что собственно нужно: Нужны книги, статьи или советы про то как проектировать ООП приложения под PHP. Вот такая вот дилемма у меня возникла во время попытка написать красивую ООП программу. С одной стороны хочется использовать ООП потому что красиво и удобно, с другой стороны не совсем понятно как это реализовывать с такой "дискретной" спецификой. Суь программы: написать сайт где пользователь получает задание в виде набора страниц для посещения. Надо засечь время проведенное на каждой странице, а также сохранить тесты вполенные на ней. Сей час думаю как эту задачу поделить на классы и объекты для реализации. Это сообщение отредактировал(а) Dima50 - 25.8.2009, 13:12 |
|||
|
||||
NewDima |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: 10 Всего: 12 |
php заточен для использование в web, протокол (http) и специфика взаимодействия клиента и сервера не заточены под такое использование классов, о котором вы говорите (десктопно).
А вопроса по существу я не увидел, кроме задачи. Но ее конечно же никто не будет решать за вас |
|||
|
||||
icewind |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 11.4.2009 Где: Ростов-на-Дону Репутация: 20 Всего: 20 |
С таким подходом и правда лучше не использовать ООП... И почему же работать с полями класса хуже чем с массивом? Основное внимание нужно обращать не на то, сколько вызывается конструктор, а на то какой объем информации будет передан классу и как он с ней будет работать.
А с отказом от ООП удастся избавится от запросов к базе?
откуда такие данные? В чем экономия? -------------------- ![]() |
|||
|
||||
Dima50 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 78 Регистрация: 20.10.2007 Репутация: 1 Всего: 2 |
Есть класс пользователь. Надо вывести пользователей зарегестрированых в системе. Быстрей сделать запрос к бд, вывести имена пользователей. Чем на основе запроса БД формировать обьекты для каждого пользователя. А потом проходить по созданым обьектам и вызывать метод печати имени (или ссылки) для каждого обьекта. |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
![]() -------------------- Amazing ![]() |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
||||
|
||||
Ипатьев |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 28 Всего: 37 |
Объект какого класса?
|
|||
|
||||
Dima50 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 78 Регистрация: 20.10.2007 Репутация: 1 Всего: 2 |
Ты имеешь ввиду сформировать один объект Пользователь. Получить набор строк из БД где и каждую строку подставлять в этот обьект. Вместо того чтоб использовать множестов обьектов класса Пользователь. Очень часто описание отдельной абстракции храниться в строке таблицы базы данных. В вопросах когда надо показать список этих абстракций (пользователей, списка задач для каждого пользователя, разновидностей товаров на складе). Получается быстрей из базы данных пользователю, а не формировать создавать: Обьект класса склад, который содержит в себе обобьет товары. Сей час в чем хочется доскональна разобраться:
Кстати использую для работы Code Ignitor. Это сообщение отредактировал(а) Dima50 - 25.8.2009, 14:01 |
|||
|
||||
MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
тогда не используй -------------------- Amazing ![]() |
|||
|
||||
Dima50 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 78 Регистрация: 20.10.2007 Репутация: 1 Всего: 2 |
||||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
нет, я говорю: сделай один объект подключения к БД, один метод для запрос выборки и вызови один метод построения списка пользователей |
|||
|
||||
amazing |
|
|||
![]() царапка Профиль Группа: Участник Сообщений: 22 Регистрация: 27.8.2008 Где: Каменск-Уральский Репутация: 2 Всего: 14 |
||||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
Dima50, мне кажется, вам для ваших целей ORM нужна. Это несколько более отдаленная (продвинутая/сложная) тема от среднестатистического веб-строительства.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
Dima50 |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 78 Регистрация: 20.10.2007 Репутация: 1 Всего: 2 |
Понятно. как видно, из-за "дискретной" специфики и порой больших объемов данных не всегда можно реализовывать самые очевидные способы разделения программы на объекты. Нужны качественные источники по проектированию систем именно для PHP, в которых на примерах излагается где нужно и своевременно использовать наследование, refleciton, интерфейсы. Добавлено через 12 минут и 42 секунды
Да, CodeIgniter совместим с php4. Но разве это мешает в собственных классах использовать возможности php5? |
||||
|
|||||
Dima50 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 78 Регистрация: 20.10.2007 Репутация: 1 Всего: 2 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |