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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как бы вы организовали mvc? 
:(
    Опции темы
Muerto
Дата 8.9.2010, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Нашел вот такой туториал 
http://anantgarg.com/2009/03/13/write-your...amework-part-1/
http://anantgarg.com/2009/03/30/write-your...amework-part-2/
Структура здесь такая:
user posted image


application - application specific code
config - database/server configuration
db - database backups
library - framework code
public - application specific js/css/images
scripts - command-line utilities
tmp - temporary data 


Что вы думайте об этом туториале?



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


Эксперт
****


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

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



Классический вариант MVC:

Классы сущностей;
Классы DAO;
Классы менеджеров; 
Классы контроллеров;
Различные вспомогательные классы - view, коммандные классы, валидаторы...

Как это работает?

Приходит запрос. Фреймворк разбирает URL и решает к какому методу какого контроллера обратиться и что ему передать.

Вызывается метод контроллера. 

Если был сабмит формы, то для данных создается командный объект который проходит валидацию (фреймворк это может делать неявно, но может и не делать -тогда создание коммандного объекта и вызов валидатора осуществляется в контроллере). Командный объект отправляется в менеджер*. Менеджер создает сущность по командному объекту и отправляет ее в DAO для сохранения в постоянное хранилище (обычно DB)

Если не было сабмита формы (идет запрс на вывод каких то данных) - контроллер обращается к менеджеру, тот из DAO, получает сущность/сущности, формирует по ней view - возвращает в контроллер, тот передает ее шаблонному движку.

Зачем нужны VIEW? 

Допустим, мы хотим вывести на странице список имен всех авторов и рядом с каждым последнюю публикацию автора.

Для этого метода нужно создать view с полями имяАвтора и названиеПоследняяПубликация. В задачу соответствующего менеджера будет входит создание коллекции этих view. Для этого ему придется обращаться к авторДАО и публикацияДАО. 


Естественно - такой вариант не единственный и не всегда оптимальный.

Часто во фреймворках с авто генерацией модели используют не паттерн DAO, а ActiveRecord, в PHP это весьма оправдано, ввиду возможности имитировать ленивую загрузку для связанных сущностей. Однако код классов ActiveRecord может повергнуть в шок своими костылями, потому, если Вы не используется автогенерация модели лучше использовать паттерн DAO - он прозрачней. 


п.с. прошу прощения если не совсем внятно выразил свои мысли.


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


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Muerto
Дата 15.9.2010, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



В общем... хоть я сначала ещё подучиться хотел...
Но все же коя как я мой фреймворк дописал...

Обзываю я его пока simplemvc


http://learn-php.ru/simplemvc/index/show/

Пока что есть только метод show на index

И генератор страницы ошибок... можете повтыкать всякую  smile  за место Index и show

Структура вышла очень не простая в конце...

Но я доволен результатом...

Теперь на его базе я хочу блог построить...


Структуру организовал такую...

Есть папка application
И там есть три папки, models views controllers

Контроллеры называются helpController indexController errorController etc.
Методы лежат в папках
К примеру все методы для indexController лежат в папке index и дальше Controller их вызывает по своему усмотрению(а точнее как мы запрограмировали)...

Ну и наконец папка view где лежат по сути дела php шаблоны...

Папка application deny from all, доступ к ней из-вне запрещен!

Все картинки css и тп, у нас часть public, это единственная папка которая доступна публично...

Что бы запустить вот этот несчастный hello world по сути дела..

http://learn-php.ru/simplemvc/index/show/

Мы идем в после htaccesss в индекс

Объявляем разные константы для наших классов и не только

Подгружаем boostrap

ОБоявляем пару вещей

Затем router


В общем вся работа индекса, только вот в этом:

Код

$registry->controller->setMethod($registry->Mname);
$registry->controller->setModel($registry->Mpath);

$Mname=$registry->Mname;
$registry->controller->$Mname();
$registry->controller->setViewD($registry->Vpath);

$registry->controller->render();


Класс Benchmark который засекает время генерации... тоже в index...

В идеале router и boostrap если я сделал хорошо трогать никогда не надо будет...
index в общем тоже трогать не зачем...

теперь только добавляешь страницы, и радуешься "легкой" жизнью =-)

Это сообщение отредактировал(а) Muerto - 15.9.2010, 00:38


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


Эксперт
***


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

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



Буду очень рад если дадите советы в плане безопасности...

На данный момент я слабых мест не вижу...

Если взять к примеру http://learn-php.ru/simplemvc/index/show/

И вставить что то другое, при попытки подгрузить что то левое, тупо выдаст 404

К примеру XSS попытаемся впихнуть какой нить
http://learn-php.ru/simplemvc/%22%27/inde/x%27%22/show/

Это сообщение отредактировал(а) Muerto - 15.9.2010, 00:49


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


Эксперт
****


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

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



Muerto, 

Выложи код, посмотрим  smile 


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Muerto
Дата 15.9.2010, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Хотелось показать вам его силу...

Поэтому вот пример

Без кеширования

http://learn-php.ru/simplemvc/index/show/

С кешированием

http://learn-php.ru/simplemvc/index/show2/


У меня опция, через контроллер могу кэш вглючить страницы...

У меня на компе, когда кэш используешь даже для hello world, прирост значителен....
А вот намоем сервере... почему то как то не значительный прирост, может даже увеличении генерации...
Интересно...

Как бы загрузить файл иногда дольше чем сгенерировать  smile 

Может .php кэш сделаю...
у него производительность быстрей будет...
хотя и так все быстро  smile 

Это сообщение отредактировал(а) Muerto - 15.9.2010, 01:15


--------------------
user posted image
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.0604 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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