[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Структура MVC
Страницы: 1, 2
ApuktaChehov
Всем привет!

Последнее время мучают меня мысли о структуру каталогов в MVC.
Вот варианты:

1 вариант
------------------------------------------
ctrls
----admin
----orders
----reports
----stats
models
----admin
----orders
----reports
----stats
views
----admin
----orders
----reports
----stats
styles
----admin
----orders
----reports
----stats
------------------------------------------

2 вариант
------------------------------------------
components
----admin
--------ctrls
--------models
--------views
--------styles
----orders
--------ctrls
--------models
--------views
--------styles
----reports
--------ctrls
--------models
--------views
--------styles
----stats
--------ctrls
--------models
--------views
--------styles
------------------------------------------

Вроде все одно и тоже, но не понимаю, что же удобнее.
В первом варианте удобно, когда все контроллеры, модели и представления вместе. Всегда ясно где их икать.
Во втором, кажется удобным когда каждый конкретный компонент содержит все необходимое для своей работы "в самом себе", т.е. в своем каталоге. Кажется, что такой структурой проще и безопаснее управлять. Так же если нужен новый компонент, то мы его тупо копируем в библиотеку компонентов и все, он работает.

Жду подкрепленные опытом мнения.

Спасибо.

_____________
Игорь_Vasinsky
Первый - по мне.

для всех контроллеров (моделей и т.д) общие папки, какой контроллер - читать из GET, например


if(!file_exists(HOME."/controllers/controller.".$_GET['route'].".php"))
exit('Не найден файл крнтроллера бла-бла-бла');


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ApuktaChehov
Согласен. Если второй вариант:

if(!file_exists(HOME."/".$_GET['route']['component']."/controllers/controller.".$_GET['route']['ctrl_name'].".php"))
exit('Не найден файл крнтроллера бла-бла-бла');


Сложнее, НО! Если несколько контроллеров? Все равно выделять для них папку.

Вообще второй вариант да, сложнее, потому что запрос уже должен выглядеть:

имя_компонента/имя_контроллера/действие.
Но с другой стороны, что плохого в:

order/show/25,
если первый вариант выглядит:
show_orders/25
?

_____________
kaww
ИМХО. второй вариант предпочтительней (сам использую примерно такую структуру). Остается загадкой почему урл зависит от структуры каталогов?
ApuktaChehov
kaww - да он не зависит. Просто когда по URL можно определить где исполняемый файл - это удобно.

Еще поясню.
Такой URL как order/show/25, готовит, что загружается компонент order, контроллер этого компонента show и, учитывая, что метода 25 нет у этого контроллера, то соответственно выполняется дефолтовый метод, которому передается число 25. В противном случае URL будет таким: order/show/get/25.
Тут get выступит как метод контроллера.

Вообще запутанно, иногда удобно и понятно одно, иногда другое.

_____________
inpost
ApuktaChehov
Первая без моделей smile.gif Они мешаются только )

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
ApuktaChehov
inpost - сказал как отрезал. Даже спорить не хочется wink.gif

Только не понятно о каких модулях речь laugh.gif

_____________
inpost
ApuktaChehov
Имелось ввиду Модели ) Опечатка, сначала писал коммент про модули, в итоге старое слово осталось smile.gif

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
kaww
Цитата (inpost @ 11.04.2013 - 08:13)
Первая без модулей  Они мешаются только )

Допустим пм гоморит: нужно прикрутить комментарии. Если модульная структура, то копируем comments в modules/ и в нужном месте в коде:
<?=App_Helper::get('Comments/Comments')->init($item)//$item - загруженная модель, например, товар?> иначе придется все разложить по нужным каталогам, что еще нормально, а вот если нужно выпилить какой-то компонент - это уже не так увлекательно
inpost
kaww
Я понял тебя, я ошибся, не модУли, а модЕли, беседа об MVC smile.gif
Ну а модули уже состоят из модели, вида и контроллера, у меня без модели)

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
kaww
inpost
, в mvc не может быть модульной структуры? второй вариант как раз такой структурой и является (компоненты, модуль называй как угодно) в отличие от первого. В предыдущем сообщении я именно об этом говорил )
ApuktaChehov
inpost - Как это без моделей? Все в контроллерах?

_____________
twin
A почему нужно выбирать... у меня вот используются все три варианта. А порыться, так и больше. Обязателен только контроллер. Если действий мало, им и ограничимся. Если много и они повторяются, не грех и модель. Если это самодостаточный модуль, то вообще отдельно.

Вообщем получается что то похожее на расширенный первый вариант. Это удобнее тем, что одну модель можно юзать в куче контроллеров.

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
inpost
ApuktaChehov
http://ru.wikipedia.org/wiki/Model-View-Controller
ТТУК

В целом понятное дело, если я хочу запрос написать:
$res = mysql_query("SELECT * FROM `table`");
while($row = mysql_fetch_array($res)) {
$data = $row[key].$row[key2];
}

То это ни в какую калитку с представлением Model не лезет. А модель будет тут:
$data = $db->query('all')->specialMetod()->getData;

При этом при таком подходе необходимо всё то, что написал в процедурке выше - неожиданно лезть в модель и прописывать там.
Как бы это выглядело на процедурке вместе с моделью:
Контроллер
$data = getSpecialData();


Модель
function getSpecialData() {
$res = mysql_query("SELECT * FROM `table`");
while($row = mysql_fetch_array($res)) {
$data = $row[key].$row[key2];
}
return $data;
}


Вот и получается, что такой модели в быдло-коде не место, а только в мега-супер-пупер крутом ООП :)
А всё потому, что в моём "представлении на идеальный код" моделью должен быть интерфейс для постоянных запросов, а не создавать целый класс для того, чтобы 1 раз в жизни на одной страничке обратиться к ней. С другой стороны я разделяю популярные запросы и отношусь к функциям и классам так: если определённое действие повторяется 2 или более раз, то необходимо его выделить в отдельный участок кода, в ту же модель, которая у меня называется библиотекой функций и классов. Но в представлении MVC необходимо выделять не так, как делаю я - только повторяющиеся участки, а абсолютно все участки, и маразм доходит до такой катушки:
class helloWorld {
private $text;
function __construct() {
$this->text = 'Hello World';
}
public writeHelloWorld() {
return $this->$text;
}
}

То есть абсолютно всё тупо пихать в модели не думая о том, а надо ли захламлять их пустым результатом.

П.С. Имхо! :) Всё, я защищен от помидорков, потому что я употребил ИМХО.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.