[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Основы MVC
Digidie
Здравствуйте! Может кому то покажется это смешным, но я полный 0 в MVC. Перелопатил кучу сайтов но везде все так запутано и непонятно. Не могли бы вы, Уважаемые гуру показать элементарный пример, да хотя бы вывод "Hello world" через MVC. Или дать ссылку на такой пример. Везде где не смотрел, везде какие то роутеры и все прочее. Я просто хочу увидеть работу трех файлов, например model.test.php, controller.test.php, test.tpl - как то так. Заранее очень благодарен!



Спустя 20 минут, 54 секунды (15.06.2012 - 16:47) sergeiss написал(а):
Цитата (Digidie @ 15.06.2012 - 17:27)
Перелопатил кучу сайтов но везде все так запутано и непонятно.

Скорее всего это потому, что люди сами не понимают, что пишут smile.gif

Вот тут почитай: http://ru.wikipedia.org/wiki/MVC - только не лезь в код, что там написан, читай только описание.

И еще. Не надо делать "абсолют" из это концепции! Почему именно 3 файла ты хочешь? Потому что в названии 3 слова? smile.gif Но они отражают суть, а не количество требуемых файлов.
Цитата (Википедия)
Концепция MVC позволяет разделить данные, представление и обработку действий пользователя на три отдельных компонента

а уж сколько ты файлов для этого сделаешь, будешь ты использовать классы или не будешь - это уже совсем другой разговор!!! Суть именно в четком разделении этих 3-х частей.

Спустя 27 минут, 8 секунд (15.06.2012 - 17:15) inpost написал(а):
Digidie
Пишу об одной из разновидностей MVC:
Входящие данные методом GET указывают нужные файлы, которые необходимо подключить. Подключаются они через include. То место, которое подключает эти файлы и называется роутером.
Модулем называют ядро, то всё то, что не относится к конкретной странице. Так, например, переменные и функции, которые действуют по всему сайту вне зависимости от страницы. Кроме этого общий шаблон HTML-кода (меню, логотип, всё, кроме центральной изменчивой части).
Из модуля подключается через роутер 2 файла: news.php (контроллер) и news.tpl (вид).
Контроллер делает всю работу конкретной страницы, всё, кроме вывода информации на экран. Он занимается запросами к БД, обработкой данных и т.д. и т.п.
Вид: лишь выводит внутрь общего шаблона центральную "изменчиваю" часть. В виде можно использовать лишь шаблонизатор или функции нативного шаблонизатора самого ПХП: if-else, switch, while, for, echo. Никаких обработок, лишь вывод просто, либо вывод в цикле или по условию.

Спустя 26 минут, 14 секунд (15.06.2012 - 17:41) Digidie написал(а):
То есть если я например буду делать форму отзывов, то у меня будет примерно следующее:
В View у меня будет отображаться сама форма(если что то не заполнено то один файл, если заполнено, то второй файл, и просто форма третий файл)
В Model у меня будет работа с базой(вставка,выборка), обработка полей(заполнены или нет)
Поправьте если что не так.
И вот вопрос, что у меня тогда будет в Контроллере?

Спустя 6 минут, 11 секунд (15.06.2012 - 17:47) inpost написал(а):
Digidie
для формы достаточно один файл. Просто внутри ставишь различные условия if-else.
model - это подключение к БД, общее для ВСЕГО сайта. Настройки, свойства, стандартный набор переменных. Допустим: константа, в которой указываешь контактный е-меил, или константа, в которой указываются количество записей на странице для всех пагинаторов.
В контроллере - обработка полей.

Спустя 2 минуты, 35 секунд (15.06.2012 - 17:50) Digidie написал(а):
Ну теперь более менее понятно. Спасибо. А есть конкретный пример, было вообще хорошо.

Спустя 1 час, 9 минут, 22 секунды (15.06.2012 - 18:59) Alexey33 написал(а):
Да,поддерживаю.Хотелось бы какой нибудь конкретный пример.Читал множество статей,но так и не въехал.

Спустя 30 минут, 30 секунд (15.06.2012 - 19:29) inpost написал(а):
Модуль, стандартные настройки.
<?php
error_reporting(E_ALL);
session_start();
header('Content-Type: text/html; charset=utf-8');

include_once './config/config.php';
include_once I_ROOT.'/libs/default.php';
include_once I_ROOT.'/libs/class_default.php';
include_once I_ROOT.'/variables.php';
include_once I_ROOT.'/language/'.I_LANGUAGE.'.php';

// Встроенный router в модуль. Не использовал отдельный файл:
ob_start(); // включили обфусикацию. Чтобы результат занести в переменную
include_once I_ROOT.'/modules/allpages.php';
include_once I_ROOT.'/modules/'.$_GET['page'].'/'.$_GET['rem'].'.php'; // контроллер
include_once I_ROOT.'/skins/tpl/'.$_GET['page'].'/'.$_GET['rem'].'.tpl'; // Вид
$content = ob_get_contents(); // в $content у нас содержание внутренней страницы
ob_end_clean();

// завершение. Подключили главную страницу и в тексте вывели внутреннее содержание:
include_once I_ROOT.'/skins/tpl/index.tpl';


Теперь смотрим далее:
index.tpl:
<html>
<head>
</head>
<body>
<div
class="navigation">NAVI</div>
<div
class="content">
<?php
echo $content; ?>
</div>
<div
class="footer"></div>
</body>
</html>


Вид:
<div>
<?php
if($row['var'] == 7) { ?>
<b><?php
echo $row['text']; ?></b>
<?php
} else { ?>
<form></form>
<?php
} ?>
</div>


Контроллер:
<?php
if(isset($_POST['submit'])) { // обработка данных
mysql_query("INSERT ...");
header("Location: url");
}

$res = mysql_query("SELECT ..."); // Достаём данные
$row = mysql_fetch_assoc($res);

Спустя 2 минуты, 39 секунд (15.06.2012 - 19:32) Invis1ble написал(а):
Цитата
<html>
<head>
</head>
<body>
<div class="navigation">NAVI</div>
<div class="content">
<?php echo $content; ?>
</div>
<div class="footer"></div>
</body>
</html>

а это не вид?
Цитата
<?php
if(isset($_POST['submit'])) { // обработка данных
    mysql_query("INSERT ...");
    header("Location: url");
}

$res = mysql_query("SELECT ..."); // Достаём данные
$row = mysql_fetch_assoc($res);

в контроллере работа с БД? фу smile.gif

Спустя 5 минут, 13 секунд (15.06.2012 - 19:37) sergeiss написал(а):
Ну вот у меня, как я считаю, MVC wink.gif есть. Реализовано так.

1. Выборка данных из БД. В разных местах, разноплановые данные. По запросу юзера делается выборка статистики для определенного объекта, за определенное время (день или интервал дней).
2. Выбранные данные записываются в определенную структуру (класс), который сериализуется и пишется в БД. Далее мне известен АйДи этой записи.
3. Полученный АйДи может быть использован для выборки данных и построения: данных в табличном виде для показа юзеру (на самом деле тот же скрипт, что и выбирает данные); для построения графика, библиотека GD2 (как вариант, вот так http://owndesign.ru/tests/rotate/rotate_gr...php?id=129812) - впрочем, тут и контроллер присутствует одновременно с видом) - а также для передачи юзеру в виде CSV файла, если он жмякнет по определенной ссылке/кнопке.

Где тут MVC?
(M) Модель - что и как выбирать. В ответ на определенный запрос выбираются определенные данные из большого набора таблиц.
(V) Вид - показометр: таблица, картинка, файл. Для их построения достаточно только зайти в отдельную таблицу и по АйДи выбрать уже готовые данные. Для некоторых типов данных нет картинок, а только таблицы и файлы.
(C ) Контроллер - интерфейс взаимодействия с юзером. Большой набор разноплановых страниц, каждая из которых отвечает за определенный вид статистики.

Код показывать не буду, потому как смысла нету. Если алгоритм понятен, то реализовать можно будет.

inpost - насколько я понимаю, работа с БД - это все-таки "модель". http://ru.wikipedia.org/wiki/MVC - тут очень хорошо даны определения.

Спустя 2 часа, 36 минут, 28 секунд (15.06.2012 - 22:14) inpost написал(а):
sergeiss
Пишут что да, это модель, которая не совсем удобная. Вообще это различные направления MVC, она же не одна. Я ниже ещё дописал...

Invis1ble
Лично в моём представлении модель - это шаблон, поэтому данную часть я бы отнёс именно к модели, а вид - это уже случаи.
И чем не нравится мой контроллер? smile.gif
Ну ок, покажи схематически как бы ты это реализовал и продемонстрировал.

Даже судить о вашем сообщении, то вы ядро не относите к MVC, а модель - это элементная часть моего контроллера, который представляет из себя и модель и контроллер в одном файле.

И вообще, программирование - это модернизация подходов smile.gif

Спустя 16 минут, 36 секунд (15.06.2012 - 22:30) YVSIK написал(а):
Хм)) посмотю чем дело кончится))
задам один вопрс ??? не три а один

в чем различие межу словами модель и модель ?
вопрос задан не спроста, и они в концепции имеют разные значения, встречаются дважды , пока мы будем оперивровать ими, этими так похожими словами у ТС будет путанница ИМХО

вообщем , кто найдет разницу с меня пипожок) biggrin.gif

ЗЫ) для ТС все до такой степени очевидно, вот люди маются посмотри мою концепцию она в подписи.

Спустя 1 час, 3 минуты, 14 секунд (15.06.2012 - 23:34) sergeiss написал(а):
Цитата (YVSIK @ 15.06.2012 - 23:30)
в чем различие между словами модель и модель ?

Ты знаешь... Когда какой-то человек задает подобный вопрос, то у меня всегда одно и то же ощущение: ему хочется поговорить, а не с кем smile.gif Не в обиду тебе, но это так вот кажется. Потому что без уточнений, что же ты имел ввиду, данный вопрос ответа не имеет. А уточнений ты не даешь. То есть, хочешь просто пообщаться. Что само по себе не так уж и плохо, вобщем-то wink.gif, я просто констатирую факт.

Спустя 22 минуты, 35 секунд (15.06.2012 - 23:56) YVSIK написал(а):
sergeiss
НЕТ , но замечание того стоит))
всегда есть путанница этой самой МВЦ в том , когда начинают
объяснять что такое эта штука не уточняясь что есть что, человек вроде , как понял но когда начинает разбираться самомстоятельно, опять тупик

ещё раз Все очень достаточно, да куча может быть слов, вообщем будет игра слов.


есть ТРИ слова)))))ЭТО (МОДЕЛЬ-КОНТРРОЛЕР_ ВЫВОД)
а вот все вместе это то-же ведь МОДЕЛЬ (мать её етить)

что в итоге :

концепцияМОДЕЛЬ=(МОДЕЛЬ-КОНТРРОЛЕР_ ВЫВОД)

тут даже кто понял начиная отвечать, ИМХО сам путается , почему

когда одно слово будет значить все ТРИ а когда его содержимое и так добесконечности попробу не сбиться
ну вот примерно так )) ИМХО !!

Спустя 2 минуты, 53 секунды (15.06.2012 - 23:59) inpost написал(а):

Спустя 1 час, 34 минуты, 5 секунд (16.06.2012 - 01:33) sergeiss написал(а):
Цитата (YVSIK @ 16.06.2012 - 00:56)
концепция МОДЕЛЬ=(МОДЕЛЬ-КОНТРРОЛЕР_ ВЫВОД)

Интересно, где ты это нашел этот цикл?... Скорее всего у того автора, который сам УЖЕ не хочет разбираться и который, из вредности, решил запутать других, которые ЕЩЕ не разобрались wink.gif

Я уже давно знаком с этим: чтобы хорошо объяснить что-то, надо сначала самому хорошо понять это "что-то". Иначе получится полная лажа и непонимание у слушателя. Поэтому я всегда утверждаю: если нечто написано мутно и непонятно, то это значит, что автор сам не знаком толком с тем, о чем пишет.

Спустя 7 часов, 24 минуты, 49 секунд (16.06.2012 - 08:58) YVSIK написал(а):
sergeiss wink.gif
inpost wink.gif
wink.gif
а теперь рассмотрим скрин МОДЕЛИ MVC
user posted image
теперь, МОДЕЛЬ имеет три [b]МОДУЛЯ[/b], каждый модуль имеет свое название,
на латинском, переводим на русский.

первое буква(слово)
модуль=> M-model-------(МОДЕЛЬ) tongue.gif
вторая буква(слово)
модуль=> С-controller---(контроллер)
третья буква(слово)
модуль=>V-view --------(представление)
вот и получилось МОДЕЛЬ в МОДЕЛИ
оставется каждый раЗ, при описании делать уточнение, какое слово МОДЕЛЬ относится к
внутреннему, а какое к внешнему, ?? по значению))
вот эти постоянные НЕ-уточнения сбивают с толку, всяк начавший Ету штуку постигать ))
sergeiss
Цитата
Интересно, где ты это нашел этот цикл?

вот и получился этот цикл: МОДЕЛЬ в МОДЕЛИ!
ЗЫ) вот потому, эти все недосказанности сбивают с толку , а ещё прибавить в эту-же
копилку, направление стрелок, полное выпадение в осадок.

ЗЫ) ТС модель MVC, это основное правило построения твоего будущего сайта,
какое правила напишешь такие и будут, какие связи предпочтешь, так и будет,
ещё короче:
MVC это правило работы сайта.


Спустя 9 минут, 31 секунда (16.06.2012 - 09:07) twin написал(а):
Цитата (inpost @ 15.06.2012 - 14:15)
Пишу об одной из разновидностей MVC:
Входящие данные методом GET указывают нужные файлы, которые необходимо подключить. Подключаются они через include. То место, которое подключает эти файлы и называется роутером.
Модулем называют ядро, то всё то, что не относится к конкретной странице. Так, например, переменные и функции, которые действуют по всему сайту вне зависимости от страницы. Кроме этого общий шаблон HTML-кода (меню, логотип, всё, кроме центральной изменчивой части).
Из модуля подключается через роутер 2 файла: news.php (контроллер) и news.tpl (вид).

На самом деле это не имеет ничего общего с MVC

Спустя 2 минуты, 24 секунды (16.06.2012 - 09:10) twin написал(а):
Цитата (Invis1ble @ 15.06.2012 - 16:32)
в контроллере работа с БД? фу  smile.gif

Чёэто вдруг фу? Википедий начитался с TTУK ихними зендовскими?
Повторюша - дядя хрюша. Делать функционал там, где он используется единожды, в отдельном файле, и гордо называть это моделью - верх идиотизма. Где профит то?

Спустя 34 минуты, 10 секунд (16.06.2012 - 09:44) Digidie написал(а):
Цитата (inpost @ 15.06.2012 - 16:29)
Модуль, стандартные настройки.
<?php
error_reporting(E_ALL);
session_start();
header('Content-Type: text/html; charset=utf-8');

include_once './config/config.php';
include_once I_ROOT.'/libs/default.php';
include_once I_ROOT.'/libs/class_default.php';
include_once I_ROOT.'/variables.php';
include_once I_ROOT.'/language/'.I_LANGUAGE.'.php';

// Встроенный router в модуль. Не использовал отдельный файл:
ob_start(); // включили обфусикацию. Чтобы результат занести в переменную
include_once I_ROOT.'/modules/allpages.php';
include_once I_ROOT.'/modules/'.$_GET['page'].'/'.$_GET['rem'].'.php'; // контроллер
include_once I_ROOT.'/skins/tpl/'.$_GET['page'].'/'.$_GET['rem'].'.tpl'; // Вид
$content = ob_get_contents(); // в $content у нас содержание внутренней страницы
ob_end_clean();

// завершение. Подключили главную страницу и в тексте вывели внутреннее содержание:
include_once I_ROOT.'/skins/tpl/index.tpl';


Теперь смотрим далее:
index.tpl:
<html>
<head>
</head>
<body>
<div
class="navigation">NAVI</div>
<div
class="content">
<?php
echo $content; ?>
</div>
<div
class="footer"></div>
</body>
</html>


Вид:
<div>
<?php
if($row['var'] == 7) { ?>
<b><?php
echo $row['text']; ?></b>
<?php
} else { ?>
<form></form>
<?php
} ?>
</div>


Контроллер:
<?php
if(isset($_POST['submit'])) { // обработка данных
mysql_query("INSERT ...");
header("Location: url");
}

$res = mysql_query("SELECT ..."); // Достаём данные
$row = mysql_fetch_assoc($res);

А где здесь модель? И откуда берутся все файлы в настройках?

Спустя 53 минуты, 4 секунды (16.06.2012 - 10:37) YVSIK написал(а):
очень хороший вопрос, ну очень!!
Цитата (Digidie @ 16.06.2012 - 10:44)
А где здесь модель? И откуда берутся все файлы в настройках?

Модель ты будешь строить САМ!!!!!
понимаешь? САМ!
в самой модели ТРИ модуля, каждый МОДУЛЬ отвечает правилам(на твое усмотрение) ты эти правила сделаешь, как пример взаимосвязь твоих папок и файлов, между собой
первый МОДУЛЬ входящий КОНТРОЛЛЕР!
он принимает
второй МОДУЛЬ это внутренний МОДЕЛЬ=механизм(как пример это или подключение к базе или подключение общих файлов С функциями и С переменными и ТД.)
третий МОДУЛЬ это ПРЕДСТАВЛЕНИЕ, вывод на экран что только-что принял Контроллер, собрал МОДУЛЬ МОДЕЛИ (внутренней модели) а преставление это ПОКАЗАЛО

в результате мы увидели только что собранный сайт: как для примера , толькосто собрали, по частям , по кирпичикам и получили ЦЕЛОЕ, целую СТРАНИЦУ собранную и малых частей

Спустя 1 час, 42 минуты, 29 секунд (16.06.2012 - 12:20) sergeiss написал(а):
По-моему, пора подытожить всё, что сказали в теме smile.gif

Цитата (Digidie @ 15.06.2012 - 17:27)
Я просто хочу увидеть работу трех файлов, например model.test.php, controller.test.php, test.tpl - как то так.

Суть в том, что вовсе не обязательно тут будут такие 3 файла. Потому что деление тут больше логическое, по выполняемым функциям.

Спустя 4 минуты, 13 секунд (16.06.2012 - 12:24) Invis1ble написал(а):
Эх, не хотел я ничего писать в этом топике, т.к. знал, что грядет очередной холивар... smile.gif
twin
Парирую.
Во-первых, кто сказал, что функционал используется единожды? И даже если единожды - где гарантия, что в дальнейшем этот кусок кода не понадобится в другом контроллере?
Во-вторых, фрагментация удобна для тестирования и рефакторинга. Потому что гораздо проще протестировать несколько слабосвязанных небольших фрагментов кода, чем портянку из 100500 строк.
ИМХО

PS. Да, и чтоб не было предположений, что я тупо скопировал откуда-то свою точку зрения, скажу что изначально я мыслил как ты, но на практике пришел все-таки к такой модели построения приложения, т.к. считаю ее более логичной и удобной.

Спустя 30 минут, 51 секунда (16.06.2012 - 12:55) inpost написал(а):
Invis1ble
Холивар? Лишь различные способы решение общей проблемы, каждый выбирает то, что ему больше по душе и удобнее.

Спустя 9 минут, 28 секунд (16.06.2012 - 13:04) YVSIK написал(а):
Invis1ble biggrin.gif
и я, и я , и я того-же мнения"!!

так что подходил к этому вопросу с осторожностью) wink.gif

user posted image

Спустя 5 минут, 54 секунды (16.06.2012 - 13:10) Игорь_Vasinsky написал(а):
YVSIK
мы по моему уже выяснили - нам с тобой уже дали понять что мы с тобой имеем, мягко сказать, поверхностное мнение об этом паттерне, месяца 3 назад biggrin.gif

Спустя 5 минут, 6 секунд (16.06.2012 - 13:15) Digidie написал(а):
Всем спасибо! Но я таки немогу врубиться huh.gif Кто то пишет что соединение с базой и все подобное должно быть в моделе. На примере оказывается что вышеперечисленное лежит в контроллере. То ли я дурак, то ли лыжи не едут. Есть какой нибудь стандарт!? Какая нибудь теорема чтоли? Дайте ссылку на более менее понятный пример ПОЖАЛУЙСТА!

P.S. Скажите пожалуйста, откуда взялись файлы из примера выше?

Спустя 2 минуты, 8 секунд (16.06.2012 - 13:17) YVSIK написал(а):
Игорь_Vasinsky ну вот и тебя тут только не хватало.
понеслась)) ну может тебе это и дали понять, Эт твоЕ собственное мнение, я к этому не отношусь, и имею только свое железное и не нуждающемуся в твоем подтверждении или подписи, мнение.
Алес )) то-бишь с тобой Усё я закончил!! tongue.gif

Спустя 6 минут, 10 секунд (16.06.2012 - 13:23) YVSIK написал(а):
Digidie
уже повторюсь смотри в подпись, некоторым это даже помогло, впрочем настаивать не буду, и забудь про три файла, смотри что каждое слово значит , от этого и плясать,


мои звучат так MVC это правило работы сайта.
и этим все сказано, вообщем попробуй проанализировать работу кадого модуля отдельно, в той теме в подписи.

Спустя 1 час, 13 секунд (16.06.2012 - 14:24) Игорь_Vasinsky написал(а):
YVSIK
т.е. ты всё же видишь в роли преподавателя??? biggrin.gif biggrin.gif biggrin.gif biggrin.gif

Спустя 32 минуты, 39 секунд (16.06.2012 - 14:56) Игорь_Vasinsky написал(а):
Цитата
MVC это правило работы сайта

Цитата
понеслась)) ну может тебе это и дали понять, Эт твоЕ собственное мнение, я к этому не отношусь, и имею только свое железное и не нуждающемуся в твоем подтверждении или подписи, мнение.

ну чё ты споришь wink.gif

Digidie
начни отсюда, далее по разделам
http://irbis-team.com/15/4/4

Спустя 24 минуты, 6 секунд (16.06.2012 - 15:20) Digidie написал(а):
Игорь_Vasinsky
Спасибо! Это действительно понятный мануал!

Спустя 1 час, 34 минуты, 51 секунда (16.06.2012 - 16:55) twin написал(а):
Цитата (Invis1ble @ 16.06.2012 - 09:24)
Эх, не хотел я ничего писать в этом топике, т.к. знал, что грядет очередной холивар... smile.gif
twin
Парирую.
Во-первых, кто сказал, что функционал используется единожды? И даже если единожды - где гарантия, что в дальнейшем этот кусок кода не понадобится в другом контроллере?
Во-вторых, фрагментация удобна для тестирования и рефакторинга. Потому что гораздо проще протестировать несколько слабосвязанных небольших фрагментов кода, чем портянку из 100500 строк.
ИМХО

PS. Да, и чтоб не было предположений, что я тупо скопировал откуда-то свою точку зрения, скажу что изначально я мыслил как ты, но на практике пришел все-таки к такой модели построения приложения, т.к. считаю ее более логичной и удобной.

На самом деле практичнее исходить из обратного. Ты говоришь - а кто сказал, что единожды. А я говорю - а кто сказал, что не единожды? Сначала нужно определить этот момент, потом принимать решение. Ваша (приверженцев академического подхода) беда в том, что вы ленитесь это делать на стадии разработки. Пытаясь прикрыться фиговым листом рассуждений "а вдруг потом когда-нибудь потребуется". Ну и еще тем, что так делают все.

Фрагментация абсолютно неудобна для рефакторинга. Для тестирования тем более. Вот пример.

В модели есть метод, определяющий какие-то сущности. Мне требуется добавить одну из них. У меня два варианта. Первый - ваш классический: переопределить метод и добавить то, что мне нужно. Это ведет к увеличению строк кода, усложнению программы и запутыванию логики. Второй - наплевать на инкапсуляцию и полезть в модель. Это грозит тем, что метод, буде вызван в другом месте тупо не сработает. Мне придется искать поиском по файлам вызовы, править их и так далее. Что неминуемо влечет за собой потерю времени, вероятность ошибки и прочие прелести.

Так вот. Если я, открыв контроллер, вижу запрос, я на 100% уверен, что этот запрос сработает здесь и только здесь. И совершенно не грею голову, как приходится делать это вам. Если мне нужен этот запрос в нескольких местах- да. Тогда модель - святое дело.

Что ксается 100500 строк. Еще одна пугалка. Никогда у меня файл не превышал 400 строк. Не потому, что я стараюсь - просто не нужно. Не приходилось мне в одном контроллере писать столько кода, как я не старался. Просто потому, что это нонсенс. Если функционал настолько велик, есть императивный подход, деление и пр. Так что мимо.


Что касается - изначально мыслил так, а теперь не так, так вот. Я тоже это проходил. И вернулся обратно, ибо не все то золото, что блестит. Стоит только поразмыслить с точки зрения рациональности. А зендовцев я прекрасно понимаю - им нужно двигать свой продук. А команда крайне сильная, потому им все и заглядывают в рот. Тем более - коньюнктура. Разрабы фреймворков не идут против течения, даже если это противоречит логике. Себе дороже.

Спустя 25 минут, 58 секунд (16.06.2012 - 17:21) inpost написал(а):
Digidie
Соединение с базой в контроллере?! Не нашел в этой теме хотя бы от кого-то такого содержания текст.

Спустя 18 секунд (16.06.2012 - 17:21) Invis1ble написал(а):
twin
Цитата
На самом деле практичнее исходить из обратного. Ты говоришь - а кто сказал, что единожды. А я говорю - а кто сказал, что не единожды?

нет, практичнее как раз сразу подумать о расширяемости, чем потом по несколько раз переписывать код. Это и есть стадия разработки.
Если речь идет о выполнении задачи в условиях цейтнота (за ночь пофиксить баги, получить оплату, сдать заказчику и забыть навсегда) - то да, можно писать как попало, не забыв спрятать все контакты, потому что кому-то потом прийдется разбираться во всем этом безобразии smile.gif
Цитата
Фрагментация абсолютно неудобна для рефакторинга. Для тестирования тем более. Вот пример

Пример:
есть код, описывающий логику редактирования комментария. Комментарий может отредактировать его автор или админ из "админки". Зачем мне писать один и тот же код (речь не только о запросах в БД, но и валидация, обновление кэша и т.п.) в двух контроллерах? А если ролей > 2 ? Сколько ролей, столько и дублей кода в различных контроллерах?
Теперь о тестировании и рефакторинге. Написан юнит-тест для вышеупомянутого метода, и при очередном внесении изменений в логику тест проваливается. Правим один едиственный метод до прохода им теста или лихорадочно переписываем все контроллеры с этим куском кода?
Цитата
переопределить метод и добавить то, что мне нужно. Это ведет к увеличению строк кода, усложнению программы и запутыванию логики. Второй - наплевать на инкапсуляцию и полезть в модель.

Не путай теплое с мягким. Наследование и концепция MVC - далеко не одно и то же.
Так что мимо smile.gif

Спустя 46 минут, 55 секунд (16.06.2012 - 18:08) Invis1ble написал(а):
inpost
Извини, пропустил твой коммент.
Цитата
Лично в моём представлении модель - это шаблон, поэтому данную часть я бы отнёс именно к модели, а вид - это уже случаи.

в твоем примере я вообще не увидел модели (точнее она есть, в "контроллере" в виде запросов)
Цитата
вы ядро не относите к MVC

о каком ядре идет речь?
Цитата
модель - это элементная часть моего контроллера, который представляет из себя и модель и контроллер в одном файле.

вот именно, строго говоря, если верить вике (щас полетят копья от twin'а smile.gif) - то у тебя никакое не MVC в твоем примере

Спустя 43 секунды (16.06.2012 - 18:09) twin написал(а):
Invis1ble
Цитата
то да, можно писать как попало
Нравится мне это определение. Как попало, это читай: не как все.

Какая нахрен расширяемость, о чем ты говоришь? Я же талдычил о единственно возможном функционале. Пример - счетчик посещений (ну интерфейс имею ввду). Преславутый конкурс последний. Сейчас лень вспоминть, да и специифика у каждого своя. Но такого полно, когда нет, и по определению, быть не может повторений.

Цитата
потому что кому-то потом прийдется разбираться во всем этом безобразии

Вот именно. Именно с этим безобразием мне и пришлось недавно столкнуться (читай пример выше). Был бы запрос в контроллере, я бы исправил за три минуты и успокоился. А он в модели. И пришлось лопатить весь сайт в поисках вызовов. А там не одна сотня контроллеров. Ищи-свищи. Чем проще функционал, тем легче разобраться и меньше вероятности ошибки.

Цитата
Не путай теплое с мягким. Наследование и концепция MVC - далеко не одно и то же.
Ты о чем? Причем тут концепция? Я про запросы в контроллерах, не более:
Цитата
в контроллере работа с БД? фу

Если функционал используется единожды - нет смысла в модели. Вернее не так. Нет смысла выносить логику модели из контроллера в отдельный файл. Тут я Стаса четырьмя руками и костылем поддерживаю.

Спустя 18 минут, 16 секунд (16.06.2012 - 18:27) Invis1ble написал(а):
twin
Цитата
Как попало, это читай: не как все.

Нет, как попало - это на от*бись
Цитата
Какая нахрен расширяемость, о чем ты говоришь?

обыкновенная. Когда приложение находится в постоянном динамичном развитии, требования часто меняются и наращивается новый функционал. А ты пытаешься подогнать искусственный пример со счетчиком, где функционал строго определен и меняться не будет (хотя это тоже под вопросом в реальной жизни).
Цитата
Вот именно. Именно с этим безобразием мне и пришлось недавно столкнуться (читай пример выше). Был бы запрос в контроллере, я бы исправил за три минуты и успокоился. А он в модели. И пришлось лопатить весь сайт в поисках вызовов. А там не одна сотня контроллеров. Ищи-свищи. Чем проще функционал, тем легче разобраться и меньше вероятности ошибки.

это следствие твоей привычки к твоему фреймворку, который я при всем уважении к тебе назвать ни MVC-фреймворком ни MVC с ТТУК не могу по определению, т.к. модель отсутствует в принципе (точнее есть сплав модели и контроллера).
Тебе просто сложно работать с системой, построенной по-другому, не так как у тебя. У меня тоже такое бывает, когда работаю с кодом, написанным не так, как я привык.
Цитата
Ты о чем?

я об этой твоей фразе:
Цитата
В модели есть метод, определяющий какие-то сущности. Мне требуется добавить одну из них. У меня два варианта. Первый - ваш классический: переопределить метод и добавить то, что мне нужно. Это ведет к увеличению строк кода, усложнению программы и запутыванию логики. Второй - наплевать на инкапсуляцию и полезть в модель. Это грозит тем, что метод, буде вызван в другом месте тупо не сработает. Мне придется искать поиском по файлам вызовы, править их и так далее. Что неминуемо влечет за собой потерю времени, вероятность ошибки и прочие прелести.

Цитата
Если функционал используется единожды - нет смысла в модели. Вернее не так. Нет смысла выносить логику модели из контроллера в отдельный файл.

согласен, но гарантии, что логика в будущем не будет дублироваться в других частях системы нет и быть не может.
Для простых систем MVC вообще вреден, если нужно написать бота со строго заданным поведением, то я напишу единственный скрипт с двумя функциями для лога в одном файле на 300 строк кода.

Спустя 29 минут, 8 секунд (16.06.2012 - 18:57) twin написал(а):
Invis1ble
Цитата
Нет, как попало - это на от*бись
Вот вот. Есть общепринятые догмы, шак вправо - побег. А программист ИМХО должен думать о том, как лучше и удобнее, а не о том, как модно. И если я открываю файл и вижу там всю логику сразу - это удобнее. Нежели придется открыть минимум два. А ведь на этом ни кто останавливаться не собирается. Модель базовая (абстрактная). Модель частная для общего случая. Модель собственно частная. Контроллер - уже 4.
Цитата
А ты пытаешься подогнать искусственный пример со счетчиком, где функционал строго определен и меняться не будет
Не подогнать. А именно показать пытаюсь, что полно такого функционала, который
Цитата
строго определен и меняться не будет 
Вот для таких случаев (повторюсь - их очень много) вполне достаточно иметь всю логику в контроллере. Открыл - увидел - победил. Это просто и удобно.
Цитата
это следствие твоей привычки к твоему фреймворку, который я при всем уважении к тебе назвать ни MVC-фреймворком ни MVC с ТТУК не могу по определению, т.к. модель отсутствует в принципе (точнее есть сплав модели и контроллера).
Нет у меня никакого фреймворка. У меня есть простая и логически объяснимая структура, которая да, не является
Цитата
ни MVC-фреймворком ни MVC с ТТУК
А привычки, поверь, нет. Ибо постоянно приходится работать с чужими кодами, которые построены по "академической" схеме. И чем больше я с ними занимаюсь, тем больше укрепляюсь с вере, что это все от лукавого. Ибо паттерн MVC, как таковой, изначально был придуман вовсе не для веб. И к веб имеет отношение, как корова к седлу. Отсюда и все безуспешные попытки хоть как-то внятно объяснить, что это и с чем его едят.

Цитата
согласен, но гарантии, что логика в будущем не будет дублироваться в других частях системы нет и быть не может.
Глупо было бы перечить. Однко вероятность такая стремится к нулю. И какой профит ходить в каске только потому, что иногда на головы падают кирпичи? Или ты ходишь в каске?

Спустя 17 минут, 55 секунд (16.06.2012 - 19:14) Invis1ble написал(а):
twin
Цитата
И если я открываю файл и вижу там всю логику сразу - это удобнее. Нежели придется открыть минимум два

Вот! Тут-то и кроется причина наших различных точек зрения - тебе удобней так, а мне удобней, когда все разложено по полочкам и я лучше открою 2 файла, в одном из которых, к примеру, будет прием внешних данных, передача их в модель, рендеринг шаблона, редирект по вкусу, а в другом - непосредственно бизнес-логика smile.gif Но чаще нужно открыть лишь один из них, т.е. кол-во кода перед глазами, относящегося к конкретной задаче увеличивается. И для меня это - просто и удобно.
Посему, это самый настоящий холивар. Т.е. бессмысленный спор о вкусах и предпочтениях. Хотя аргумент насчет дублирования кода при наращивании функционала, я считаю, остался неопровержимым. Каска тут не при чем, в ней не удобно, а вынести дублирующийся код (ну или который в будующем может быть продублирован) в отдельное место - голова не потеет.

PS.
Цитата
Нет у меня никакого фреймворка. У меня есть простая и логически объяснимая структура, которая да, не является
Цитата
ни MVC-фреймворком ни MVC с ТТУК

я имел в виду структуру, которая описывается тут под названием "Структура сайта (MVC)". Если ты пользуешься чем-то в корне отличающимся, то извини, не знал.

Спустя 25 минут, 20 секунд (16.06.2012 - 19:40) twin написал(а):
Invis1ble
Цитата
Вот! Тут-то и кроется причина наших различных точек зрения - тебе удобней так, а мне удобней, когда все разложено по полочкам
Ну не верная же формулировка. Не удобнее. Ты сам сказал - привычнее. А привыкнуть можно и на гвоздях спать. Слово "удобство", в отличие от, имеет вполне логическое объяснение. Определение: комфорт, практичность. И вполне материальные характеристики. Время, ресурсы, простота.

Опять же проецируя на повседневную жизнь - разве можно сказать, что "удобнее" хранить одежду в разных комнатах. Носки в одной, рубашки в другой, брюки в третьей. Да, все по полочкам. И даже кое-кому привычнее. Допустим Киркоров так живет. И что, нам уподобиться? Может это и "удобнее", если этого всего вагоны и каждый раз приходится одевать разное. Но вот удобнее ли, когда одеваешься утром на работу в повседневный шмот? В одной комнате и в одном шкафу (да, на разных полках, ни кто не отрицает логику модели в контроллере) куда как удобнее. С этим смешно спорить.

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

Что касается
Цитата
я имел в виду структуру, которая описывается тут под названием "Структура сайта (MVC)".
ну это далеко не фреймворк. И вот еще фраза оттуда, сразу после попытки как-то объяснить MVC:
Цитата
Я сейчас покажу еще одну структуру, которая очень похожа на упомянутую, но кроме того содержит в себе модульный элемент и на мой взгляд наиболее прозрачна и оптимальна.

Не претендовал я никогда на MVC в "чистом" виде. Ибо дурь.

Спустя 5 минут, 58 секунд (16.06.2012 - 19:46) Invis1ble написал(а):
twin
Цитата
Ну не верная же формулировка. Не удобнее. Ты сам сказал - привычнее. А привыкнуть можно и на гвоздях спать. Слово "удобство", в отличие от, имеет вполне логическое объяснение. Определение: комфорт, практичность. И вполне материальные характеристики. Время, ресурсы, простота.

Почему это? Я обосновал, чем удобней мне - как минимум, больше кода помещается, нет "лишних" кусков типа редиректов, рендеринга и т.п., отвлекающих от сути.
Цитата
Опять же проецируя на повседневную жизнь - разве можно сказать, что "удобнее" хранить одежду в разных комнатах.

Слишком утрируешь. В разных комнатах одежда - на разных ПК код. А я говорю о разных полках в одном шкафу - разные вкладки в одной IDE.
Цитата
А посему привычка очень часто подменяет собой понятие удобства. Просто стоит сбросить пелену привычки и посмотреть на мир чистыми глазами.

хех, тоже самое могу и тебе сказать smile.gif

Спустя 19 минут, 18 секунд (16.06.2012 - 20:05) YVSIK написал(а):
twin_Invis1ble
Как вы можете так быстро и так точно писать? эх мне-бы так, но увы уже никогда не получится.

а вообще пора поостыть laugh.gif ИМХО
солнце восходит утром!
НЕТ
солнце взойдет на рассвете!

Спустя 3 минуты, 29 секунд (16.06.2012 - 20:09) twin написал(а):
Цитата
Почему это? Я обосновал, чем удобней мне - как минимум, больше кода помещается, нет "лишних" кусков типа редиректов, рендеринга и т.п., отвлекающих от сути.
От какой сути? От сути того, что ты именно в этот момент рассматриваешь? А тот же редирект - часть логики. И чтобы понять общую картину , придется лезть в другой файл. Придется. Всё, определение удобства пикнуло.

Цитата
В разных комнатах одежда - на разных ПК код. А я говорю о разных полках в одном шкафу - разные вкладки в одной IDE.
А в чем принципиальная разница? Что на одном ПК, что на сервере в Амстердаме и дома... Была бы связь. Все равно это в разных вкладках, а значит в разных комнатах. Всё.

А полки в одном шкафу - это блоки в пределах одного файла. Не нужно бегать из комнаты в комнату (из файла в файл). Все на расстоянии вытянутой руки.

Цитата
хех, тоже самое могу и тебе сказать

Все дело в том, что мне есть что с чем сравнить. Я работаю и по своей схеме, и по вашей. С чужим кодом. А ты преподносишь то, к чему привык, как единственно рассово верное решение.

Спустя 1 минута, 16 секунд (16.06.2012 - 20:10) twin написал(а):
YVSIK
Практика)))) Для того и холивары. Не думаешь ли ты, что я стараюсь его убедить или наоборот. Просто упражняемся в риторике и укрепляемся в вере)))

Спустя 6 минут, 29 секунд (16.06.2012 - 20:16) Invis1ble написал(а):
twin
Цитата
От какой сути? От сути того, что ты именно в этот момент рассматриваешь?

да, от сути, которая нужна здесь и сейчас. Мне проще и удобней открыть сразу нужный файл и перед глазами сразу будет нужный код, а в твоем случае мне прийдется как минимум искать глазами нужный участок.
Цитата
Все дело в том, что мне есть что с чем сравнить. Я работаю и по своей схеме, и по вашей. С чужим кодом. А ты преподносишь то, к чему привык, как единственно рассово верное решение.

Ошибаешься, у меня тоже достаточно опыта работы с чужим кодом.
Цитата
единственно рассово верное решение.

я - не фанатик, я - практик.

Дальнейший спор на данный момент считаю бессмысленным, т.к. все аргументы и доводы уже высказаны, некоторые не единожды.

Спустя 4 минуты, 34 секунды (16.06.2012 - 20:21) twin написал(а):
Цитата
Мне проще и удобней открыть сразу нужный файл и перед глазами сразу будет нужный код
Факт. Когда в комнате одни галстуки - его проще выбрать и одеть. Однако крайне редко приходится ходить в одном галстуке)))

Лан, закругляемся, согласен.

Спустя 42 минуты, 29 секунд (16.06.2012 - 21:03) bodja написал(а):
Я тут пару месяцев назад говорил ,что толком ,что такое MVC никто не знает...
Походу ничего не изменилось. biggrin.gif
Как по мне сцепились двое
Invis1ble и twin
один пишет ООП ,другой функционально,естественно понять друг друга немогут. wink.gif
Вся соль в том ,что MVC никак не ложится под ООП - это с одной стороны.
С другой , по факту ПХП генерит "мертвый" код шаблона ,и мы радуемся что разделили логику от представления.
Уже на этом этапе можно сказать ,что мы имеем просто иллюзию MVC.
Походу умные дядьки с высокой самооценкой или с целью маркетингового пиара наклепали умных тем как нужно "правильно" писать,а мы тут сидим ,споры разводим. wink.gif

Спустя 7 минут, 53 секунды (16.06.2012 - 21:11) Invis1ble написал(а):
Да! Давайте писать все вперемешку, html + php, ведь на выходе один черт только html tongue.gif biggrin.gif
Даешь революцию! ph34r.gif

PS.
Цитата
естественно понять друг друга немогут

та не, я думаю, мы друг друга прекрасно поняли. Просто надо же похоливарить, а то писать код скучно biggrin.gif

UPDATE. Не ту цитату вставил, поправил )

Спустя 20 минут, 22 секунды (16.06.2012 - 21:32) sergeiss написал(а):
Хотел написать "побежал за попкорном", но вдруг понял, что в деревне его нету smile.gif Кукуруза есть, но не попкорновская. Да и то только мелкие ростки пока, до початков еще месяца 2 ждать надо будет.
И вообще. Интересно читать тему wink.gif Кто-то говорит об общих принципах, кто-то - о реализации. Но при этом, типа того, что об одном и том же.

"Машина черная!" - "Нет, она не черная, она металлическая!" - "Вы оба не правы, у неё сиденья кожей обшиты" - спор где-то на этом уровне получается.

Спустя 2 минуты, 12 секунд (16.06.2012 - 21:34) Invis1ble написал(а):
sergeiss
ну изложи свою точку зрения (касательно MVC), мне интересно например rolleyes.gif

Спустя 47 секунд (16.06.2012 - 21:35) bodja написал(а):
Invis1ble
Я напишу только две строчки кода,
я надеюсь вы когда нибудь оцените их важность.

JS
Цитата
this.el=createElement('div');
document.appenChild(this.el);

AS
Цитата
this.el=new Object();
this.appendChild(this.el);


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

Насчет перемешки,я могу дать ссылку ,где пхп вообще не касается шаблона,
это революцией будем тогда считать? biggrin.gif

Спустя 5 минут, 8 секунд (16.06.2012 - 21:40) Invis1ble написал(а):
bodja
да понятно, что php быстро отрабатывает и скрипт умирает, в отличие от js, as (и многих других). И что это значит, не нужно ничего разделять? К черту структурированность кода?

Спустя 6 минут, 39 секунд (16.06.2012 - 21:46) Digidie написал(а):
Ещё раз скажу спасибо! Более менее нужный материал получил, теперь хоть что то посеялось в моей голове. Однако хочется узнать, каким методом участники этой темы осваивали MVC? Может книга, или методом тыка, или ещё как нибудь?

P.S. Кстати тоже толчок smile.gif

Спустя 2 минуты, 15 секунд (16.06.2012 - 21:49) sergeiss написал(а):
Цитата (Invis1ble @ 16.06.2012 - 22:34)
sergeiss
ну изложи свою точку зрения (касательно MVC), мне интересно например

В этой теме, на самой первой странице.

Спустя 3 минуты, 41 секунда (16.06.2012 - 21:52) Invis1ble написал(а):
sergeiss
ok, понял. Просто думал, вдруг есть еще что-то добавить к сказанному на первой странице.

Спустя 7 минут, 55 секунд (16.06.2012 - 22:00) sergeiss написал(а):
Цитата (Invis1ble @ 16.06.2012 - 22:52)
ok, понял. Просто думал, вдруг есть еще что-то добавить к сказанному на первой странице.

Нечего добавить. Система четкая, (мне) понятная, работает исправно. Если кому-то надо подробнее, могу поподробнее расписать. Но код тут приводить не буду - это точно. Не потому, что код секретный smile.gif, а потому, что если человек понимает алгоритм, то код сам напишет. Иначе "закопается" в чужом коде и забудет основное, т.е. алгоритм.

Спустя 39 минут, 56 секунд (16.06.2012 - 22:40) bodja написал(а):
Цитата
да понятно, что php быстро отрабатывает и скрипт умирает, в отличие от js, as (и многих других). И что это значит, не нужно ничего разделять? К черту структурированность кода?


Ну я не говорил ,что нужно все мешать,но туже стуктуированость кода можно понимать по разному,и по разному ее строить.

Приведу конкретный пример.Выше код я давал.
Повторим.
Цитата
this.el=createElement('div');
document.appenChild(this.el);


Теперь внимание.Делаем дальше.

Цитата
this.el.style.background='#000';
this.el.style.width='100px';


Тоесть фактически в обьекте el надятся стили,тоесть ВИД а ведь это не я придумал. wink.gif
Зато когда я в конкурсной работе решил перенести этот подход на пхп, тоесть представил класс счетчика свойства которого включали стиль отображения ,меня за это раскритиковали.Раскритиковали и за то ,что в методах класса присутствовал хтмл,
хотя все ,что я хотел ,что бы класс чуствовал себя полностью независимым от сторонних файлов и кода за пределами класса, и все содержал в себе.Ведь независимость обьекта - это ИМХО и есть основа ООП и устойчивости работы кода ,которую вы пытаетесь доказать twin-у ,а он понять неможет biggrin.gif
Итог работы любого кода - это визуальное или звуковое отображение.В любом случае ,любой код будет иметь прямое или коственное отношение к ВИДу,все зависит от того как вид и под каким кодом будет интерпретироватся.

Спустя 8 минут, 44 секунды (16.06.2012 - 22:49) Invis1ble написал(а):
bodja
а, теперь уловил мысль. Из предыдущего коммента просто не совсем понял, что имелось ввиду.

Спустя 2 часа, 18 минут, 35 секунд (17.06.2012 - 01:07) SitnikovArtur написал(а):
Цитата (sergeiss @ 16.06.2012 - 18:32)
Кто-то говорит об общих принципах, кто-то - о реализации. Но при этом, типа того, что об одном и том же.

Не об одном и том же.
Модель нужна для того, чтобы Контроллеру было все равно что такое данные. Контроллер их у Модели спросил, получил и передает в Представление. Тогда система становится независима от вида хранения данных и их оформления. Такой подход легкомасштабируем, всегда понятно где что искать. В отличие от запросов в контроллерах - не зависит от mysql.

Спустя 12 часов, 27 минут, 32 секунды (17.06.2012 - 13:35) twin написал(а):
Цитата (SitnikovArtur @ 16.06.2012 - 22:07)
Модель нужна для того, чтобы Контроллеру было все равно что такое данные. Контроллер их у Модели спросил, получил и передает в Представление. Тогда система становится независима от вида хранения данных и их оформления.

На самом деле эти аргументы надуманы и притянуты за уши. Вернее это очередная попытка оправдать нерациональную вещь. Вот ответьте мне только на один вопрос. Как часто лично Вам приходится менять "вид хранения данных". Я могу сказать точно - такое происходит раз на миллион наверное. Ибо сначала приложение проектируется, потом создается. Как можно менять коней на переправе... Што за разброд и шатания.
Цитата
Такой подход легкомасштабируем, всегда понятно где что искать. В отличие от запросов в контроллерах - не зависит от mysql.
Да нифига ни чего не понятно. Все равно для того, чтобы узнать какая модель работает, нужно открыть контроллер. Ну я имею ввиду, если работаешь с чужим кодом. В чем профит и понятность? И еще раз повторю свой довод, если он остался не замеченным. Если у меня есть потребность изменить модель, как мне узнать, какие контроллеры с ней работают? Ведь получится тришкин кафтан - в одном месте правим, в другом рвется. Нужно удостоверится, что моя правка не повредит в другом месте.

Я ничего не имею против модели (хотя я не считаю это моделью как таковой). Просто это класс (ну или не обязательно класс), который инкапсулирует какой то определенный функционал, который в свою очередь может быть востребован в разных местах. Но если есть 99,99% уверенности, что этот функционал потребуется здесь и только здесь, для чего тянуть его в модель? Ведь гораздо понятнее - если этот запрос в контроллере, он больше ни где не может быть использован. И его можно смело изменять.

Просто ваш подход чересчур академичен. Так и только так. Наплевать на рациональность, будем следовать букве закона. Модель - вид - контроллер. Никаких вольностей.

Спустя 3 часа, 4 минуты, 43 секунды (17.06.2012 - 16:40) SitnikovArtur написал(а):
Цитата (twin @ 17.06.2012 - 10:35)
Как часто лично Вам приходится менять "вид хранения данных"

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

Цитата (twin @ 17.06.2012 - 10:35)
Если у меня есть потребность изменить модель, как мне узнать, какие контроллеры с ней работают?

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

Цитата (twin @ 17.06.2012 - 10:35)
Просто ваш подход чересчур академичен. Никаких вольностей.

Ну почему же. Некоторый процент кода не вписывается в данную модель, с этим ничего не поделаешь. И под представлением, разными людьми могут подразумеваться разные концепции. У меня например в представлении нет html кода, я через систему управления настраиваю модели. У другого представлением может быть целая система тем или шаблонов. А некоторый функционал вообще не имеет вывода.

Я не навязываю какой-то свой подход. Я не могу использовать классы в своих проектах и управлять ими через систему управления, не переписывая код или саму систему управления, а любой чих должен сопровождаться программистом. И все потому что было тяжело отделить вызов от запросов и html кода. А для того чтобы воспользоваться классом, я должен разобраться в его устройстве, чтобы потом в дальнейшем его настраивать, все равно создать нужные условия для его функционирования, и если все это получится хоть как-то собрать до кучи(Это например, легче переписать заново, чем попробовать внедрить в масштабный проект. Это абсолютно жесткий не настраиваемый модуль), то кто не увидит, скажет что говнокод. Нет чтоб легко работать, надо обязательно все усложнять.

Спустя 2 часа, 59 минут, 8 секунд (17.06.2012 - 19:39) twin написал(а):
Цитата
Мне срочно нужно менять вид хранения данных. Да нужно будет заглянуть в котроллер и представление, посмотреть структуру данных. Обычное дело.
Нет, вы меня не поняли. Обычное дело менять вид хранения? Тоесть ваше утро начинается не с чашки кофе, а со срочного перевода сайтов с mysql на postgre, а следующее с postgre на XML?
Как часто приходилось делать это на практике?
Цитата
Как какие? Только один контроллер может работать со своей моделью.
Ууууу... Так все еще хуже, чем я думал. Я понимаю еще такую схему:
Цитата
                                                                    Model
                                                                /            \
                            User_Model extends Model
                                        /                  \
                    User_Controller        Admin_User_Controller
Здесь выгода понятна. А у Вас так?
Цитата
  User_Model        Admin_User_Model     
        |                            |
User_Controller    Admin_User_Controller
Категорически не понимаю...

Цитата
Это например, легче переписать заново, чем попробовать внедрить в масштабный проект
Этот скрипт написан для того, чтобы легко и непринужденно (двумя строчками всего) сделать постраничную навигацию. А не для того, чтобы внедряться в чей-то масштабируемый проект со своими законами. Он не для академиков, а для новичков. И таки да - это жесткий, малонастраиваемый модуль, таким и задумывался. Основной упор на простоту интеграции кстати.

А не лезет он в ваш проект только потому, что он написан по законам PHP, а ваш проект написан по вашим личным законам, выдаваемым за какую то эфимерную схему MVC, с которой кстати имеет мало общего, ибо построить полноценную MVC на PHP невозможно по определению. Это давно уже никем не отрицается. И костность вашего подхода как раз в этом. Вы не можете использовать сторонние наработки, потому что они часто не вписываются в вашу "стройную и гибкую" структуру. И не вписываются потому, что структура на самом деле никакая не гибкая и масштабируемая, а просто привычная для вас.

Это похоже на то, что вы привыкли жарить картошку на сковороде, и удивляетесь, что не получается сварить суп. Обвиняя при этом того, кто придумал рецепт. Да что мол за говнокулинария, как можно лить на сковородку воду, ведь это не масштабируемо.

Спустя 16 минут, 2 секунды (17.06.2012 - 19:55) Invis1ble написал(а):
Цитата
Только один контроллер может работать со своей моделью.

Это еще почему? blink.gif

Спустя 11 минут, 47 секунд (17.06.2012 - 20:07) YVSIK написал(а):
вау ну пытался не встеравть не получается ))
хух))))))
понеслась если мона так сказать)))))))))))))))))))))
не поленился все это сделать в фотошопе
И ТАК рассмотрим три примера структуры:
раз)))
==========================================
user posted image
==========================================
два)))
user posted image
==========================================
и три)))))))
user posted image
==========================================
так какой из них будет работать? конечно спору думаю уже не будет последний, как обыкновенная структура, запрос-ответ, и ТД.

Как только появлчется ВТОРОСТЕПННЫЙ модуль(модель), все и вся переворачивается с ног на голову, сразу ставят во главу угла главным словом слово модель и понеслась рассуждать кто и что главней.
Рассматривая последний никто не будет спорить , что как пример, каждый файл имеет свой обработчик, я подчеркиваю ТОЛЬКО СВОЙ, и только ему известный и только он с ним будет работать напрямую, но в этом случае получается некая свалка: файлов, папок, дпрректорий и тд.
ПОсле вмешательства МОДУЛЯ модели, второстепернного модуля, начинают ему приписывать такие ранги, такие сверхъестественные способности, такой получается коломбур, возможно до посинения это продолжать рассуждать.

Модуль в модели имеет второстепенное значени, ВТОРСТЕПЕРННОЕ, и работать будет так И только так , какими вы его полномочиями снабдите, будет это запрос из базы или повесите чтоб каждый чих был ему известен, все будет зависеть только от вашей фантазии, или умения построить достаточно прозрачную структуру.

Все остальные споры что есть что и для чего , будут зависеть только от полномочий наделенных этому модулю .
smile.gif

Спустя 4 минуты, 50 секунд (17.06.2012 - 20:11) Invis1ble написал(а):
YVSIK
Цитата
работать будет так И только так , какими вы его полномочиями снабдите

ясен пень, на то и программисты

Кстати, в Вике новая картинка-схема для иллюстрации MVC. ИМХО, намного более удачная и понятная, нежели прежняя (которую YVSIK в фотошопе порезал)

Спустя 23 минуты, 50 секунд (17.06.2012 - 20:35) YVSIK написал(а):
Invis1ble кстати я тож по началу так подумал ранее, но потом все-же пришел к выводу такому, кто не понял ему трудней, а вот кто понял, во как подспорье утверждения, что понятое верно.

Спустя 58 минут, 36 секунд (17.06.2012 - 21:34) SitnikovArtur написал(а):
Цитата (twin @ 17.06.2012 - 16:39)
Цитата
  User_Model        Admin_User_Model   
        |                            |
User_Controller    Admin_User_Controller
Категорически не понимаю...

Еще бы, а то бы может и использовали.

Цитата (twin @ 17.06.2012 - 16:39)
А не лезет он в ваш проект

Смысл не в том, чей проект, ни в коем случае, он ни в какой проект не лезет, кроме первого-второго своего сайта. Мы же не о привычках говорим, а о переносимости кода. Какой смысл писать код, который в другом проекте не подойдет? Вот что я не могу понять и с чем я не соглашусь. А если его постоянно дописывать с учетом новых требований, то тришкин кафтан как раз и получится.

Цитата (twin @ 17.06.2012 - 16:39)
по законам PHP

По законам PHP никаких HTML, MYSQL, и кучи других подключаемых расширений нет. MVC как раз для того, чтобы разделить сущности. И это очень удобная модель построения. А там хоть MVVC, MMVC хоть как угодно. Это второстепенно и дальнейшая архитектура зависит уже от привычек и задач.

Цитата (twin @ 17.06.2012 - 16:39)
что мол за говнокулинария

Заметьте, вы мне тоже самое говорите.

Invis1ble
Тут я загнул слегка с утверждением. Это не утверждение. Это один из вариантов решения приведенной твином возможной проблемы (Если у меня есть потребность изменить модель, как мне узнать, какие контроллеры с ней работают). По мне - самый элементарный, чтоб модель вообще сюда не впутывать, а решить вопрос на уровне контроллеров.

Спустя 13 минут, 45 секунд (17.06.2012 - 21:48) YVSIK написал(а):
Цитата (SitnikovArtur @ 17.06.2012 - 17:40)
У меня например в представлении нет html кода, я через систему управления настраиваю модели. У другого представлением может быть целая система тем или шаблонов. А некоторый функционал вообще не имеет вывода.

что сие изречение значит? а значит оно одно
Переведу КАША!
а зачем городить такую кашу если в регульте ты сам не разберещ где начало где конец, ты что пишешь новую свою ЦМС или новый Зенд?
Все уже дано написано, осталось только применить, в зависимости от задачь , но к данной теме имеет косвенное значение ТС спросил:
Основы MVC, Ребят, нужна помощь
все остально он врят-ли понимает что тут за дисскусия идет, он основы просил, а не выкладки гуру и их структурные схемы

Спустя 10 часов, 4 минуты, 29 секунд (18.06.2012 - 07:52) twin написал(а):
SitnikovArtur
Цитата
Смысл не в том, чей проект, ни в коем случае, он ни в какой проект не лезет, кроме первого-второго своего сайта. Мы же не о привычках говорим, а о переносимости кода. Какой смысл писать код, который в другом проекте не подойдет?
А может Вы просто не сумели его приготовить? Есть же куча таких модулей, которые так же самодостаточны, они тоже к вам не полезут получается? Может все-таки в консерватории нужно что-нибудь подправить)))

Давйте разберем по полочкам, почему именно вы не можете использовать сей модуль. Мое предположение - он не попилен на привычные вам три структуры. Однако он и не должен быть попилен. Можно легко и смело растащить по вашей структуре вызовы.
Это в контроллер. Именно там должно находится взаимодействие с клиентом.
    $paginator = new IRB_Paginator($page, $num);


Это в модель, тут запрос - святое для вас - запрос в модели.
    $res  = $paginator -> countQuery("SELECT * FROM `table`");


Это во вьюшку, тут формируется меню.
    $menu = $paginator -> createMenu();

Сам вывод данных мы вообще не трогаем. В каком виде у Вас было, без каких-либо изменений оставляем.

Что тут не так, я не понимаю. Единственное - модуль действительно малонастраиваем. Вид меню можно изменить только переписав метод. Но такой задачи и не стояло. А настроить цвета, размеры и прочая можно и стилями, там каждый элемент имеет свой собственный класс CSS.

А вот я бы не мудрил, и сделал бы это все непосредственно в контроллере. Все под рукой, все видно. Просто нарушил бы ваши незыблемые принципы.

Просто Вы взяли в руки инструмент, с которым никогда не работали, и решили, что он ни на что не годится.

Цитата
MVC как раз для того, чтобы разделить сущности. И это очень удобная модель построения.
А для чего их так фанатично делить, скажите мне пожалуйста?
Нет, я все понимаю - шаблоны, верстальщики и так далее. Однако покажите мне пожалуйста, как можно диномически сформировать таблицу с настраиваемым количеством столбцов, не используя HTML в PHP коде.

Я вот это имею ввиду.

Да, конечно, можно извернуться ужем и сделать это. Но ради чего?

Вот смотрите. Верстальщик - это художник. А любому хорошему художнику любая логика - это смерть. Художник оперирует другими понятиями - талант, вдохновение, третий глаз и так далее. Это субстанция нежная и одухотворенная, сидит с кистью из беличьего хвостика и малюет свои светотени, градиенты и т.д. . А тут приходит брутальный программист и мозолистой рукой вбивает посреди шаблона ржавые логические гвозди: if, else, foreach...

И при этом считает, что он разделил какие-то там сущности. Нихрена он не разделил на самом деле, а просто нагло переложил часть своей работы на верстальщика.

Так вот. Если что-то формируется динамически, то верстальщику совсем не нужно знать, как. Ему достаточно увидеть результат и привести его в порядок с помощью CSS. А делить сущности до последнего малюсенького тега - это программисты придумали от нечего делать.

Это конечно нужно. но не до такого же фанатизма, что не смочь интегрировать мой класс в свою структуру. Что за структура такая, я не понимаю.

Говнокулинария - это перефразированное ваше
Цитата
то кто не увидит, скажет что говнокод.
Вот и я про то. Вместо того, чтобы просто взять кастрюлю, мы будем фанатично пытаться готовить все блюда на сковороде. Ведь это очень "удобная" вещь - сковорода. И ни в коем случае нельзя использовать что-то другое. Модель-вид-контроллер. Ручка-крышка-чугуняка.
Быстрый ответ:

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