![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
Как финальная стадия изучения MVC, и создание своего фреймворка, я вот думаю как стоит организовать папки...
Я смотрел как это делают Zend,Yii, и просто разные примеры MVC в интернете... так вот вроде каждый строит структуру по своему... Предположим что у у меня сайт http://linux.rf/index/show/ Первый index Это наш контроллер, второй index это наше действие И если думать с точки зрения MVC то у меня будет контроллер Контроллер Index , который в свою очередь должен вызвать метод show, и Представление show Так вот вариантов куда его поместить контроллеры представления и модели довольна таки много Я бы мог тупо закинуть все в одну папку, обозвав index_Controller.php show_index_Model.php show_index_View.php И так для всех страниц закидать все в одну папку mywebsite Некий класс router с этим в легкую бы управился, если нормально все объявить... Можно ведь и иначе Я видел как делали внутри контроллера уже и модели т.е. сам класс Controller содержал методы которые в свою очередь были моделями которые вызывали свой view в таком случае достаточно index_Controller.php show_index_View.php Есть подход где мы разделяем все в папки к примеру controllers models views Папки в контроллере называются index.php , about.php, guestbook.php И внутри класс Controller как вариант это могло бы быть indexController.php с классом indexController.php и тп Models так же в данном примере это будет show.php etc. и views точно так же в данном примере это будет show.php etc. Ну вообще по всякому можно... Чем больше сделать все эти разделения, тем с одной стороны части менее зависимы, а со второй стороны если все на микро части разбить, то и получается в конце нечто типа Zend где ты можешь открыть файл а там вся суть класса содержать один url... Как бы вы сделали? и что мне советуйте? Это сообщение отредактировал(а) Muerto - 7.9.2010, 17:18 |
|||
|
||||
| SamDark |
|
|||
|
Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1424 Регистрация: 25.7.2006 Где: Voronezh Репутация: 10 Всего: 38 |
Это не MVC. -------------------- rmcreative.ru — Это жжж неспроста... yiiframework.ru — О фреймворке Yii на русском. reggi — здесь я регистрирую домены |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
SamDark, Ну эт я хз, вообще у MVC много вариаций и реализаций... Вот я и не знаю как стоит сделать.
А по тому что вы процитировали - Возможно я что то упускаю и не понимаю , и поэтому для меня ответ не однозначен но -> пусть физически его модели сидят у него же в классе, и кроме моделей у него ничего нету потому что он расширяет абстрактную маму какой нить BaseController, но все же его методы , каждый метод делает свое действие , к примеру если речь о блоге то это методы like,comment,rate,view,add,delete и тп... и каждый в свою очередь позовет свой view Это сообщение отредактировал(а) Muerto - 7.9.2010, 17:54 |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
Muerto, может посмотрите на Symfony? Очень неплохой и весьма хорошо спроектированный фреймворк.
Вообще прежде чем браться за что-то свое необходимо разобраться с существующими решениями, оценить их достоинства и недостатки, возможные проблемы в тех или иных случаях. Только тогда имеет смысл пробовать писать свое. ... Простите не заметил, что Вы уже смотрели Zend и Yii. Добавлено @ 18:55
теперь по поводу реализации.. неявный роутинг это зло. хотя почему-то большая часть пхп фреймворков этим страдает. по хорошему не привязывайтесь к урлу. Урлом может быть любая строка, которой в соответствие будет ставиться обработчик запроса. @читаем routing, хорошие примеры в django как-то это не красиво по-моему. и почему-то мне очень кажется что Вы не разобрались что такое "модель" вообще. Добавлено @ 18:59 а вот мне нравится концепция django. не видел нигде в php реализации этой идеи. основной составной единицей проекта является application, который включает в себя уже модели, views (по сути является контроллером), шаблоны, статику и прочее прочее. Преимуществом является то, что такие приложения можно безболезненно переносить из проекта в проект минимально настраивая, повышая реюзабельность кода. Проект становится модульным и гибким, что несомненно удобно. Это сообщение отредактировал(а) cutwater - 7.9.2010, 19:00 |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
P.S. Zend и Symfony умеют роутинг тоже, но я предпочитаю говорить о том, с чем я более знаком.
|
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
cutwater, На самом деле самый первый мой фреймворк был Symfony , но я тогда вообще нифига не понимал в ООП, да и сейчас наверно мало понимаю как здесь скажут многие... но все же...
Попытаюсь рассказать что такое модель, потому что возможно я и на самом деле не знаю что это Контроллер, это то чего вызывает наш router после обработки url (какая нибудь get переменная даже, без разницы можно использовать htaccess а можно и не...) Роль контроллера, управлять всем ходом действий ... Он загатавливает представление (View) Обращаясь к моделе (Model) От сюда и выходит что с моей точки зрения, роль модели, предоставить данные для Controller, по параметрам который он передал... Я кстати не всегда вижу толк в разделении контроллера и модели... это возможно тоже проблема, но не об этом речь. Суть темы в том, как бы вы организовали все Это сообщение отредактировал(а) Muerto - 7.9.2010, 19:06 |
|||
|
||||
| cutwater |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
Вот это очень плохо. Модель представляет собой уровень абстракции над данными. Реализуется при помощи ORM в большинстве современных фреймворков. О различных паттернах проектирования управления данными читать Мартин Фаулер "Шаблоны корпоративных приложений" если вдруг захотите разработать свой ORM Добавлено @ 19:11 Итак у нас есть скажем класс, который представляет собой таблицу базы данных - модель. + методы для работы с этой таблицей. Объект этого класса представляет собой отдельную запись (на самом деле есть и другие концепции, почитаете) Чем занимается контроллер, при помощи модели мы получаем из базы какие-то данные. Дальше их обрабатываем, считаем что надо, передаем во view / шаблон, который уже эти данные отображает. (надеюсь понятно объясняю) Это сообщение отредактировал(а) cutwater - 7.9.2010, 19:13 |
|||
|
||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
cutwater, Если я правильно вас понял, если вспомним мой класс который работает с Mysqli, то это с точки зрения MVC и есть модель?
Но мне как бы нужно этот момент лучше понять... Я планировал организовать папку modules и туда вместить папки m v c И во view будет наш шаблон в m наша модель (теперь же выходит что я хз что туда помещать ибо работу с базой данных делает у меня класс который находиться в папке library ) и наш c там будет наш контроллер В свою очередь если создаю страницу Index то такая папка появится в каждой из m v c Хотя если взять http://phpro.org/tutorials/Model-View-Controller-MVC.html то так и выходит:
У нас сам контроллер предоставил данные.... через метод index Это сообщение отредактировал(а) Muerto - 7.9.2010, 19:22 |
|||
|
||||
| cutwater |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
Э... не думаю. В таком случае у Вас будет только View и Controller. Посмотрите что такое ORM, почитайте, в википедии есть статьи. Хороший примеры ORM для пхп - Doctrine, используется в Symfony как раз таки. Добавлено через 2 минуты и 40 секунд
Со мной не согласятся. Я считаю это не правильно. Вообще зачем жестко привязывать понятие "страница" к внутренней структуре проекта. Как сделать, я уже описал выше. Посмотрите архитектуру django. мне это нравится, зачем нам еще куча папок под каждую страницу, контроллер и т.п. |
||||
|
|||||
| SamDark |
|
||||
|
Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1424 Регистрация: 25.7.2006 Где: Voronezh Репутация: 10 Всего: 38 |
cutwater,
По-моему аналогов application данги довольно много. В том же Yii это модули.
Скорее модель — компонент, включающий в себя бизнес-логику, а не только абстракцию над данными.
Нет. Модель не обязательно работает с базой. Например, модель может обращаться к twitter и получать последние записи. При этом запись может быть тоже моделью, позволяющей, например, себя удалить. -------------------- rmcreative.ru — Это жжж неспроста... yiiframework.ru — О фреймворке Yii на русском. reggi — здесь я регистрирую домены |
||||
|
|||||
| cutwater |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 592 Регистрация: 24.6.2008 Репутация: 1 Всего: 10 |
Честно меня воротит от этого кода. Жаль что в php нет декораторов и прочего синтаксического сахара. Буду мыслить шаблонами django. Как по мне то более красиво как-то так
Добавлено @ 19:33
Спорно, так как бизнес-логика это как раз уровень контроллера все же. Максимум можно отнести сюда валидацию данных, хотя это тоже спорный вопрос. Сейчас я как раз размышлаю над raw SQLAlchemy и навешением на нее валидаторов, или все таки валидацией и обработкой данных должны заниматься формы (любая абстракция над моделью, которая включает в себя правила для обработки данных), чтобы не дублировать код в той же модели и формах. Тут еще правда проблемой являются особенности реализации, если бы это писалось с нуля было бы гораздо проще. Согласен. Пытался объяснить как можно проще, чтобы было доступно хотя бы на примере.
Рябчиков не ел. хорошо если так. Это сообщение отредактировал(а) cutwater - 7.9.2010, 19:36 |
||||||
|
|||||||
| Muerto |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
SamDark, Если опять посмотреть на пример
постом выше то почему
Не должно быть частью модели? А как? Некий регистратор!!! тупо массив + __get __set Далее
Превращается в
Если бы welcome нам давала модель, то в будущем если бы я хотел брать это с текстового файла, или базы, мне бы пришлось воротить меньше кода... Слова выше не утверждение а скорее вопрос что бы понять лучше грани Это сообщение отредактировал(а) Muerto - 7.9.2010, 19:41 |
||||||
|
|||||||
| Muerto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
Я плюс один вижу очень крупный... Когда есть общее правило которые действует всегда, то можно создать класс который будет лепить на лету все это дело... как делает к примеру YII да и похоже ща почти все ... ПРосто в командной строке пишешь create about и тебе сразу и в m и в v и c записахет уже шаблон классов... и есть готовый about, осталось только немного отредактировать... А насчет ORM нужно мне почитать таки, а то этот термин мне мало о чем говорит Это сообщение отредактировал(а) Muerto - 7.9.2010, 20:07 |
|||
|
||||
| SamDark |
|
|||
|
Добрый кот ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1424 Регистрация: 25.7.2006 Где: Voronezh Репутация: 10 Всего: 38 |
cutwater,
Толстые модели в разы легче поддаются тестированию. Muerto, Верные мысли. Выглядеть это может, например, так:
-------------------- rmcreative.ru — Это жжж неспроста... yiiframework.ru — О фреймворке Yii на русском. reggi — здесь я регистрирую домены |
|||
|
||||
| Muerto |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
Почитал что говорят разные источники... И собственно не смог понять связи к тому что вы мне сказали... ORM это способ разбить к примеру класс на части и сохранить его в базу Вот что доктрина пишет The programmer must either convert the object values into groups of simpler values for storage in the database (and convert them back upon retrieval), or only use simple scalar values within the program. Object-relational mapping is used to implement the first approach. http://www.doctrine-project.org/projects/o...introduction/en ещё http://tigor.com.ua/blog/2009/10/21/orm-in-the-php-world/ тут много всего начитался, но понял не многое... особенно зачем оно мне Мне пока не удалось понять зачем оно мне нужно... объект можно хранить в базе через сериализацию.... + объект и массив в php это почти одно и то же как бы... простейший кастинг превращает любой объект в массив... Это сообщение отредактировал(а) Muerto - 7.9.2010, 21:05 |
||||
|
|||||
![]()
|
| Правила форума "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. |