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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Нужна помощь
dezvolt
Отправлено: 03 Октября, 2012 - 20:36:58
Post Id


Новичок


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


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




Здравствуйте.
Нужно "спрограммировать" серверную часть сайта.
Интересует структура(если можно так выразиться) классов на сайте.

МОДЕЛЬ
Предполагается создать 1 класс модели, который будет содержать все методы для всех типов страниц.

КОНТРОЛЛЕР
1 Базовый контроллер(абстрактный),. И классы-контроллеры для каждой страницы, которые наследуют базовый(абстрактный).

ВИД
Классов для вида создаваться не будет. Так как вид - это свёрстанные странички, в которых содержаться вставки типа <?=$news['text']?>
Вид includ-ируется в контроллер после получения данных и обработки их в Модели

Интересует вопрос, "правильной" ли является такая архитектура кода на сайте?

PS - для каждого типа страницы своя точка входа.
 
 Top
DeepVarvar Супермодератор
Отправлено: 03 Октября, 2012 - 20:58:24
Post Id



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


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


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




Нет.
 
 Top
dezvolt
Отправлено: 03 Октября, 2012 - 21:01:13
Post Id


Новичок


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


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




DeepVarvar пишет:
Нет.

Если можно, то пару слов, о том, что именно неправильно?
 
 Top
DeepVarvar Супермодератор
Отправлено: 03 Октября, 2012 - 21:08:03
Post Id



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


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


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




Модель - предполагается базовая модель, а так же ее потомки обладающие расширенным и уникальным ф-ционалом.
Контроллер - лучше сперва один фронт-контроллер, диспетчеризирующий "куда кого зачем и почему", а так же базовый контроллер, которого наследуют прочие контроллеры, к которым и "отсылает" фронт-контроллер.
Вид - не надо путать view и layout, Вид должен быть инициализирован в самом начале, насколько это возможно.
Точка входа должна быть одна: router -> frontController -> controller -> action -> assignToView
 
 Top
digi
Отправлено: 03 Октября, 2012 - 21:11:03
Post Id


Посетитель


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


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




не поддерживаю товарища DeepVarvar ;)
 
 Top
Мелкий Супермодератор
Отправлено: 03 Октября, 2012 - 21:19:32
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




dezvolt пишет:
Предполагается создать 1 класс модели, который будет содержать все методы для всех типов страниц.

Вы себе представляете объём этого "класса"?
Несмотря ни на что уже к 10тыс. строк это будет неподдерживаемый монстр.

dezvolt пишет:
Так как вид - это свёрстанные странички, в которых содержаться вставки типа <?=$news['text']?>

Потом разбираться что где и откуда проще, если каждый инклюд будет жить в своей локальной области видимости, а не видеть все данные контроллера.
Классы при этом для них создавать совершенно не нужно. Достаточно одной фабрики (см. одноимённый паттерн)


-----
PostgreSQL DBA
 
 Top
dezvolt
Отправлено: 03 Октября, 2012 - 21:27:42
Post Id


Новичок


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


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




Спасибо большое DeepVarvar
Конечно мой вопрос может показаться дурацким, но я его всё же задам!
На сайте 5 типов страниц.
Допустим я сделаю, как вы сказали базовую модель и её потомки с уник. функционалом
Так же создам фронтовой контроллер и базовый и его потомки

Но упущу создание класса View, а просто инклюдирую layout
Это будет большим грехом ?
 
 Top
DeepVarvar Супермодератор
Отправлено: 03 Октября, 2012 - 21:38:57
Post Id



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


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


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




digi пишет:
не поддерживаю товарища DeepVarvar ;)
Why?
(Добавление)
dezvolt пишет:
Но упущу создание класса View, а просто инклюдирую layout
Это будет большим грехом ?
Нет, в ад точно не попадете Радость
 
 Top
caballero
Отправлено: 03 Октября, 2012 - 21:56:09
Post Id


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


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


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




Цитата:
Но упущу создание класса View, а просто инклюдирую layout
Это будет большим грехом ?

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


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


Новичок


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


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




5 типов страниц.. Предположим, что они по юрл никак не отличаются (site.ru/pages/1, site.ru/pages/2 итд). Фронт получает id, и запускает контроллер PagesCtrl.
PagesCtrlумеет только определять тип странички и запускать нужный контроллер, и передавать ему id. По mvc определить тип он должен через модель.
Например так:
PHP:
скопировать код в буфер обмена
  1.  
  2. Class PagesCtrl {
  3.     public function defautAction($id) {
  4.         $model = new TypeModel();
  5.         $type = $model->getType($id);
  6.         //продолжение кода
  7.     }
  8. }
  9.  

Пример:
страница с id=1 это, например, тип1
Запрос: site.ru/pages/1
Фронт ------>PagesCtrl----->Type1Ctrl
Теперь Type1Ctrl – это основной контроллер, который выполняет все действия, связанные со страничками первого типа.
пример Type1Ctrl:
PHP:
скопировать код в буфер обмена
  1.  
  2. class Type1Ctrl
  3. {
  4.     public function defautAction($id)
  5.     {
  6.         $model = new Type1Model();
  7.         $values = $model->load($id)->getValues();
  8.         $view = new tplView("templates/type1Pages.php", $values);
  9.         $view->render();
  10.     }
  11. }
  12.  

Класс tplView отвечает за подключение файла и передачу в него параметра $values. Дальше в шаблоне может быть что угодно, главное чтобы в $values попали нужные данные.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB