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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: MVC

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: общие вопросы проектирования
navitesting
Отправлено: 17 Марта, 2012 - 21:18:48
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Здравствуйте! Привожу в порядок свой небольшой проект основной паттерн у которого MVC.

Внимание, вопрос!
Как лучше сделать:
1) 1 таблица 1 модель 1 контроллер N видов
2) 1 таблица 1 модель N контроллеров N видов
3) 1 таблица N моделей(добавить/модифицировать/удалить) N контроллеров N видов

И ещё вопрос - например в одной из моделей нужно узнать значения других(ой) таблиц(ы) - как лучше это сделать?

Спасибо!


-----
http://www.anymini.ru
 
 Top
DlTA
Отправлено: 17 Марта, 2012 - 22:22:56
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




табличка != модель
контрол =N моделей+ N видов
 
 Top
navitesting
Отправлено: 17 Марта, 2012 - 23:04:15
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




DlTA Спасибо! А насчёт второго вопроса не можете посоветовать?


-----
http://www.anymini.ru
 
 Top
DlTA
Отправлено: 17 Марта, 2012 - 23:29:17
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




это должно было следовать из прошлого ответ

если часть данной модели то соответствующим методом,
если же это не касается данной модели, то произвести вызовом метода соответствующей модели
 
 Top
navitesting
Отправлено: 18 Марта, 2012 - 11:55:18
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




DlTA
Спасибо! А, если, например, не существует впринципе модели, которая запрашивает те данные, что нужны, из другой таблицы, и использовать её нужно лишь в определённом контексте, как поступить -

1) написать модель к этой таблице без контроллера вида и всего остального отдельно, и вызывать её из МОДЕЛИ которой она нужна

2) написать в МОДЕЛИ метод обращающийся к этой таблице

?

И ещё по поводу видов - вид не обязан быть классом - но лучше может всё таки классом?
Может, смешно и глупо, но хочется чтобы всё было идеально и хоть вид и есть представление - отделить представление от представления - чтобы не было внутри html или php кода вообще( чтобы было чтото одно из двух зол ) -> мне нужно думать в сторону шаблонизаторов или есть какая то альтернатива?


-----
http://www.anymini.ru
 
 Top
caballero
Отправлено: 18 Марта, 2012 - 12:28:20
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
но хочется чтобы всё было идеально и хоть вид и есть представление - отделить представление от представления - чтобы не было внутри html или php кода вообще( чтобы было чтото одно из двух зол ) -> мне нужно думать в сторону шаблонизаторов или есть какая то альтернатива?

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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
navitesting
Отправлено: 18 Марта, 2012 - 12:38:21
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




>caballero

Спасибо за мнение! А я так и написал "хоть вид и есть представление"

(Отредактировано автором: 18 Марта, 2012 - 12:38:50)



-----
http://www.anymini.ru
 
 Top
navitesting
Отправлено: 19 Марта, 2012 - 09:34:13
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




Скажите, пожалуйста, как поступить в таком случае:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT tale_id,date_c,date_e,title,SUBSTR(tale,1,100) tale,grade,user_id FROM table_name WHERE tale_id IN (SELECT tale_id FROM other_table_name WHERE tag_id=x ) AND visible=yes AND user_id=y


Всё равно в две модели писать?


-----
http://www.anymini.ru
 
 Top
DlTA
Отправлено: 19 Марта, 2012 - 09:54:05
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




запрос плохой, хостер вам за него сделает наганяй,
проблема в том что внутренняя выборка не имеет ключа, чем сильно напрягает ресурс
используйте JOIN
 
 Top
navitesting
Отправлено: 19 Марта, 2012 - 10:00:04
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




DlTA
Спасибо! Правда я пока про JOIN в общих чертах знаю.
А модели две сделать если будут ключи? Пожалуйста, если вам не трудно, приведите пример или скажите что почитать, чтобы двигаться в верном направлении?


-----
http://www.anymini.ru
 
 Top
DlTA
Отправлено: 19 Марта, 2012 - 10:32:12
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




может детальней расскажите что у вас там, а то абстрактными вещами кидаться...
 
 Top
navitesting
Отправлено: 19 Марта, 2012 - 10:39:40
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




DlTA

вот модель наследуемая от общего класса Model который в свою очередь от Db а та от Settings
Сейчас я реструктуризирую это дело потихоньку, дальше конечно всё будет не в конструкторе - но не суть.
Суть в том, чтобы сделать как лучше в плане разделения моделей, как вы рекомендовали:

PHP:
скопировать код в буфер обмена
  1. class GalTales extends Model{
  2.  
  3.         public function __construct( $page = 0, $tag = 0, $author = 0 ) {
  4.                 parent::__construct();
  5.                 $limit = 'LIMIT '.($page*$this->config->getValue('TALES_PER_PAGE')).', '.$this->config->getValue('TALES_PER_PAGE');
  6.  
  7.                 if( $tag === 0 && $author === 0 ) {
  8.  
  9.                         $query = 'SELECT tale_id,date_c,date_e,title,SUBSTR(tale,1,100) tale,grade,user_id FROM '.
  10.                         $this->table_name.' WHERE visible=\'yes\' LIMIT '.$this->config->getValue('TALES_PER_PAGE');
  11.  
  12.                 } else if( $tag !== 0 && $author !== 0 ) {  
  13.  
  14.                         // <-- вот с этим запросом проблемы
  15.                         $query = 'SELECT tale_id,date_c,date_e,title,SUBSTR(tale,1,100) tale,grade,user_id FROM '.
  16.                         $this->table_name.' WHERE tale_id IN (SELECT tale_id FROM GalTalesTags WHERE tag_id=\''.
  17.                         $tag.'\' ) AND visible=\'yes\' AND user_id='.$author.' '.$limit;
  18.  
  19.                 } else if( $tag !== 0 ) {
  20.  
  21.                         // <-- вот с этим запросом проблемы
  22.                         $query = 'SELECT tale_id,date_c,date_e,title,SUBSTR(tale,1,100) tale,grade,user_id FROM '.
  23.                         $this->table_name.' WHERE tale_id IN (SELECT tale_id FROM GalTalesTags WHERE tag_id= \''.
  24.                         $tag.'\' ) AND visible=\'yes\'  '.$limit;
  25.  
  26.                 } else if ( $author !== 0 ) {
  27.  
  28.                         // <-- вот с этим запросом проблемы
  29.                         $query = 'SELECT tale_id,date_c,date_e,title,SUBSTR(tale,1,100) tale,grade,user_id FROM '.
  30.                         $this->table_name.' WHERE user_id IN (SELECT id FROM GalUsers WHERE user_id=\''.
  31.                         $author.'\' ) AND visible=\'yes\'  '.$limit;
  32.  
  33.                 }
  34.  
  35.  
  36.         }


-----
http://www.anymini.ru
 
 Top
DlTA
Отправлено: 19 Марта, 2012 - 11:32:09
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




1) у разве есть в базе записи с id=0?
2) ни одного человеческого комента, если всмотреться то понятно что выборка отличается лиш тем есть или нет автора или тега, но с учетом отображения кода на форуме, тяжело это сообразить
3) этого кода не должно быть в конструкторе (вы это понимаете но на всякий случай)
4) ну а теперь то как это вижу я (это мое субъективное имно)
у вас должна быть модель Рассказы
у этой модели должны быть метода: получить рассказ, записать рассказ, изменить рассказ, ......; при редактировании происходит также редактирование сводной таблицы привязки к тегам, это можно объединить в эту же модель.
5) запросы. $this->table_name это может быть разные таблицы, какая?
(Добавление)
6) пользуйтесь довйными кавычками, существенно упрощает код
7) а можено пример таблиц в нагладном виде, а то у меня впечатление что существенная ошибка в архитектуре
 
 Top
navitesting
Отправлено: 19 Марта, 2012 - 11:48:00
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Дек. 2011  


Помог: 1 раз(а)




5) $this->table_name - это текущая таблица - соответствующая названию класса. В классе Model от которого наследуется класс GalTales реализован небольшой метод который возвращает название наследуемого класса.

по поводу первого пункта не понял

вот таблицы:
Прикреплено изображение (Нажмите для увеличения)
d0.jpg


-----
http://www.anymini.ru
 
 Top
caballero
Отправлено: 19 Марта, 2012 - 11:58:21
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




Цитата:
вот модель наследуемая от общего класса Model который в свою очередь от Db а та от Settings

а нахрена его наследовать от DB да с еще и от settings?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB