![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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/ Структура здесь такая: ![]() 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 Что вы думайте об этом туториале? |
|||
|
||||
| Vasay |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 1 Всего: 73 |
Классический вариант MVC:
Классы сущностей; Классы DAO; Классы менеджеров; Классы контроллеров; Различные вспомогательные классы - view, коммандные классы, валидаторы... Как это работает? Приходит запрос. Фреймворк разбирает URL и решает к какому методу какого контроллера обратиться и что ему передать. Вызывается метод контроллера. Если был сабмит формы, то для данных создается командный объект который проходит валидацию (фреймворк это может делать неявно, но может и не делать -тогда создание коммандного объекта и вызов валидатора осуществляется в контроллере). Командный объект отправляется в менеджер*. Менеджер создает сущность по командному объекту и отправляет ее в DAO для сохранения в постоянное хранилище (обычно DB) Если не было сабмита формы (идет запрс на вывод каких то данных) - контроллер обращается к менеджеру, тот из DAO, получает сущность/сущности, формирует по ней view - возвращает в контроллер, тот передает ее шаблонному движку. Зачем нужны VIEW? Допустим, мы хотим вывести на странице список имен всех авторов и рядом с каждым последнюю публикацию автора. Для этого метода нужно создать view с полями имяАвтора и названиеПоследняяПубликация. В задачу соответствующего менеджера будет входит создание коллекции этих view. Для этого ему придется обращаться к авторДАО и публикацияДАО. Естественно - такой вариант не единственный и не всегда оптимальный. Часто во фреймворках с авто генерацией модели используют не паттерн DAO, а ActiveRecord, в PHP это весьма оправдано, ввиду возможности имитировать ленивую загрузку для связанных сущностей. Однако код классов ActiveRecord может повергнуть в шок своими костылями, потому, если Вы не используется автогенерация модели лучше использовать паттерн DAO - он прозрачней. п.с. прошу прощения если не совсем внятно выразил свои мысли. * - тут можно поспорить. Оправданность такого подхода зависит от того, что представляет из себя коммандный объект. -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
В общем... хоть я сначала ещё подучиться хотел...
Но все же коя как я мой фреймворк дописал... Обзываю я его пока simplemvc http://learn-php.ru/simplemvc/index/show/ Пока что есть только метод show на index И генератор страницы ошибок... можете повтыкать всякую Структура вышла очень не простая в конце... Но я доволен результатом... Теперь на его базе я хочу блог построить... Структуру организовал такую... Есть папка 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 В общем вся работа индекса, только вот в этом:
Класс Benchmark который засекает время генерации... тоже в index... В идеале router и boostrap если я сделал хорошо трогать никогда не надо будет... index в общем тоже трогать не зачем... теперь только добавляешь страницы, и радуешься "легкой" жизнью =-) Это сообщение отредактировал(а) Muerto - 15.9.2010, 00:38 |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 |
|||
|
||||
| Vasay |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2097 Регистрация: 8.3.2006 Репутация: 1 Всего: 73 |
Muerto,
Выложи код, посмотрим -------------------- Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны. |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
Хотелось показать вам его силу...
Поэтому вот пример Без кеширования http://learn-php.ru/simplemvc/index/show/ С кешированием http://learn-php.ru/simplemvc/index/show2/ У меня опция, через контроллер могу кэш вглючить страницы... У меня на компе, когда кэш используешь даже для hello world, прирост значителен.... А вот намоем сервере... почему то как то не значительный прирост, может даже увеличении генерации... Интересно... Как бы загрузить файл иногда дольше чем сгенерировать Может .php кэш сделаю... у него производительность быстрей будет... хотя и так все быстро Это сообщение отредактировал(а) Muerto - 15.9.2010, 01:15 |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |