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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно запоминать промежуточную информацию 
:(
    Опции темы
lerguide
Дата 16.4.2011, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Генерирую страницу во фреймворке CodeIgniter.
Есть класс-модель, методы которого получают инфу из БД.
Для генерации одной страницы вызывается несколько методов. 
В этих методах могут быть обращения к БД для получения одной и той же вспомогательной информации.

Такие обращения я вынес в отдельные вспомогательные приватные методы. Но теперь надо же сделать так, чтобы не получать эту информацию несколько раз.

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

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

Это сообщение отредактировал(а) lerguide - 16.4.2011, 18:00
PM MAIL   Вверх
Muerto
Дата 16.4.2011, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



lerguide, Что то в ваших словах модели модели модели модели, а контроллер где?
Вот он как раз все прекрасно и запоминает...

Вызывает один метод, получает данные, передает в другой и тп.


--------------------
user posted image
PM MAIL   Вверх
lerguide
Дата 16.4.2011, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Muerto, у меня есть такой вариант. Но мне кажется, что это не красиво.

Вот, например, метод получающий путь до текущей категории в дереве категорий - get_path_to_id($id); Внешне совершенно самодостаточный, неделимый и лаконичный метод. Но прежде чем я получу в нем путь, мне нужно будет предварительно сделать один запрос на выборку этого самого id. Если запоминать в контроллере, то получится типа такого:
$node = $Model->get_id($id);
$path = $Model->get_path_to_id($node);

Хотя, я сейчас подумал, что может это и не так уж некрасиво :)

Но все-таки модель этим всем должна заниматься. Контроллер только просит то что ему нужно. Да и если такой "промежуточной" информации будет много, и она будет разрозненной.

Это сообщение отредактировал(а) lerguide - 16.4.2011, 18:25
PM MAIL   Вверх
Muerto
Дата 16.4.2011, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



lerguide, Ну если у вас это делали бы не разные модели а одна, то можно вызывать методы модели - с модели...

Роль контроллера, контролировать путем манипуляции между моделями и видами(как правило одним видом в конце...)

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

Предположим что у вас компания из трех человек, начальник и два рабочих.
ОДин программист второй дизайнер.

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

Он поступил не красиво? решать вам... а по мне так вполне логично  smile 




--------------------
user posted image
PM MAIL   Вверх
lerguide
Дата 16.4.2011, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пока что у меня только одна модель. Не знаю будут ли еще.
Модель пока работает с таблицей дерева категорий. Мне нужно получить путь до категории и некоторый список категорий (сразу, для генерации одной страницы). В контроллере я вызываю get_path() и get_list() соответственно. Но и там и там сначала нужно получить информацию об id. Так вот, с одной стороны, логично вызывать методы get_path() и get_list() не заботясь о том, что им там нужно, и все тонкости реализовывать в модели. А с другой стороны, я не пойму, как это нормально делать в модели - что меня смущает я написал в сабже. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

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

Важно:

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

Внимание:

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

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

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


 




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


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

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