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 :: Версия для печати :: MVC и ООП "структура" классов.
Форумы портала PHP.SU » » Объектно-ориентированное программирование » MVC и ООП "структура" классов.

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

1. dezvolt - 03 Октября, 2012 - 20:36:58 - перейти к сообщению
Здравствуйте.
Нужно "спрограммировать" серверную часть сайта.
Интересует структура(если можно так выразиться) классов на сайте.

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

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

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

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

PS - для каждого типа страницы своя точка входа.
2. DeepVarvar - 03 Октября, 2012 - 20:58:24 - перейти к сообщению
Нет.
3. dezvolt - 03 Октября, 2012 - 21:01:13 - перейти к сообщению
DeepVarvar пишет:
Нет.

Если можно, то пару слов, о том, что именно неправильно?
4. DeepVarvar - 03 Октября, 2012 - 21:08:03 - перейти к сообщению
Модель - предполагается базовая модель, а так же ее потомки обладающие расширенным и уникальным ф-ционалом.
Контроллер - лучше сперва один фронт-контроллер, диспетчеризирующий "куда кого зачем и почему", а так же базовый контроллер, которого наследуют прочие контроллеры, к которым и "отсылает" фронт-контроллер.
Вид - не надо путать view и layout, Вид должен быть инициализирован в самом начале, насколько это возможно.
Точка входа должна быть одна: router -> frontController -> controller -> action -> assignToView
5. digi - 03 Октября, 2012 - 21:11:03 - перейти к сообщению
не поддерживаю товарища DeepVarvar ;)
6. Мелкий - 03 Октября, 2012 - 21:19:32 - перейти к сообщению
dezvolt пишет:
Предполагается создать 1 класс модели, который будет содержать все методы для всех типов страниц.

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

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

Потом разбираться что где и откуда проще, если каждый инклюд будет жить в своей локальной области видимости, а не видеть все данные контроллера.
Классы при этом для них создавать совершенно не нужно. Достаточно одной фабрики (см. одноимённый паттерн)
7. dezvolt - 03 Октября, 2012 - 21:27:42 - перейти к сообщению
Спасибо большое DeepVarvar
Конечно мой вопрос может показаться дурацким, но я его всё же задам!
На сайте 5 типов страниц.
Допустим я сделаю, как вы сказали базовую модель и её потомки с уник. функционалом
Так же создам фронтовой контроллер и базовый и его потомки

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

компилятору PHP начхать какой ты создал или не создал класс и как его назвал.
10. chubrick - 15 Октября, 2012 - 21:12:40 - перейти к сообщению
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 попали нужные данные.

 

Powered by ExBB FM 1.0 RC1