Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Подскажите как делать
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Подскажите как делать

Страниц (1): [1]
 

1. vanicon - 08 Апреля, 2013 - 22:39:58 - перейти к сообщению
Всем привет.
Начинаю осваивать ооп, и появилась одна проблема, точнее не понимание как ее правильно решить...
И так есть 3 сущности:
1. Пользователь в системе
2. Пост пользователя
3. Лента

У сущности пользователя есть свойства (логин пароль и т.п), одно из действий написать пост.
Для этого действия я решил вынести пост в отдельную сущность (по сути это так и есть), пост можно добавить в избранное и т.п
Также есть лента, пока тока лента постов, в эту ленту передается объект поста.
В действии написать пост, сначала создается объект поста, потом он помещается в ленту..
И все нормально вроде бы, но появилась необходимость сделать как бы рассылку 1 записи в несколько лент других пользователей, исходя из ооп, можно создать несколько десятков объектов лент, и отдать им туда объект записи...

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

Ps Извиняюсь за эту статью Улыбка
2. caballero - 08 Апреля, 2013 - 23:11:21 - перейти к сообщению
обычно когда речь о рассылке пользователь подписывается на какие то события которые потом ему рассылаются

незачем запихивать каждому в ленту.

в любом случае никаких проблем с ООП здесь нет, тем более что рассылку вообще делают через крон а там ООП нафиг не надо.
3. vanicon - 08 Апреля, 2013 - 23:16:12 - перейти к сообщению
caballero пишет:
обычно когда речь о рассылке пользователь подписывается на какие то события которые потом ему рассылаются

Думаю тут это излишне, пользователь создает объект поста, и там же можно отправлять его объект в ленту.
caballero пишет:
незачем запихивать каждому в ленту.

А как тогда?
(Добавление)
То есть в этом случае, лучше реализовывать без ооп правильно я понимаю?
Не создавать объекты пользователей и т.п
4. digi - 08 Апреля, 2013 - 23:39:20 - перейти к сообщению
есть ощущение, что вопрос больше не про ооп, а про архитектуру приложения в целом ;) а какой из элементов этой архитектуры будет объект, а какой массив - это уже дело техники.

что-то посоветовать можно, но чтобы ответ мог получиться более адекватное, нужно понять скилл реципиента ;) а именно, какие книги прочитал, посомтреть примеры кода, который реципиент готов показать, какими технологиями и библиотеками владеет, какие цмс-ки и фреймворки изучил внутри... и самое важное - для чего это всё ему надо? ;))))
5. caballero - 08 Апреля, 2013 - 23:42:15 - перейти к сообщению
Цитата:
пользователь создает объект поста, и там же можно отправлять его объект в ленту.

а смысл дублировать тот же объект по всем лентам?

Цитата:
То есть в этом случае, лучше реализовывать без ооп правильно я понимаю?
Не создавать объекты пользователей и т.п


объект пользователей как я понимаю служит не только для рассылки.
просто у некоего обекта именеюмого напрмер "рассылка" будет метод
который делает собственно рассылку или запихивает данные в Бд или еше куда. Просто метод с нужными SQL запросами. Это и есть ООП - обхект выполняет работу которая принадлежит к его логике.
(Добавление)
Цитата:
но чтобы ответ мог получиться более адекватное, нужно понять скилл реципиента

симфони он не учил - так что адекватного ответа у тебя никаким каком не получится Улыбка
6. vanicon - 08 Апреля, 2013 - 23:47:34 - перейти к сообщению
caballero пишет:
а смысл дублировать тот же объект по всем лентам?

Ну как бы изначально объект лента принадлежит объекту пользователь, или проще у пользователя есть лента)
И что бы разослать другим пользователям (друзьям или еще кому), как бы сначала нужно из бд воссоздать объекты этих пользователей, а потом к каждому из них применить типа $user->addLenta($post)
Понятное дело что так это очень и очень затратно, но разве это не логично с точки зрения ооп?
7. caballero - 08 Апреля, 2013 - 23:56:30 - перейти к сообщению
Цитата:
Понятное дело что так это очень и очень затратно, но разве это не логично с точки зрения ооп?

это нелогично с точки зрения архитектуры. Тем более это касается PHP у которго нет персистентных объектов. Определенный смысл это могло бы иметь например в ява машине когда объект живет в памяти и к нему можно прикнопить другой объект.

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

но лучше все таки не делать никакую ленту. Есть рассылки и есть пользователи. должна быть кросс-таблица которая связывает пользователей с рассылками. По сути подписка или список рассылки. по этой связи и вытянется вся лента (во всяком случае то что касается рассылки).
8. vanicon - 09 Апреля, 2013 - 00:02:06 - перейти к сообщению
caballero
Ок, буду лепить класс рассылок для пользователей, хотя тема довольно интересная...
Спасибо за разъяснение...
9. caballero - 09 Апреля, 2013 - 00:08:01 - перейти к сообщению
сделать все подряд объектами нет смысла
в теории одно а практика это совсем другое

это как в реляционной алгебре - все знают что БД должна быть нормализована до 5 формы, но в реальности это чревато сложными много табличными запросами. Поэтому есть даже такое понятие как денормализация - когда хранятся избыточные дублирующие данные но зато запросы линейные на одну таблицу и в результате производительность больше. или например хранят предварительно вычисленные агрегации. особенно это касается mysql у которого оптимизатор уступает промышленным серверам БД
10. vanicon - 09 Апреля, 2013 - 00:11:05 - перейти к сообщению
caballero пишет:
это как в реляционной алгебре - все знают что БД должна быть нормализована до 5 формы, но в реальности это чревато сложными много табличными запросами. Поэтому есть даже такое понятие как денормализация - когда хранятся избыточные дублирующие данные но зато запросы ленейные на одну таблицу и в результате производительность больше. особенно это касается mysql у которого оптимизатор уступает промышленным серверам БД

Про алгебру не знаю пока еще не доучился))
А вот про денормализацию в бд знаю, например в mongo это даже считается в порядке вещей...

 

Powered by ExBB FM 1.0 RC1