Правильно ли я понимаю MVC в веб-разработке? - PullRequest
2 голосов
/ 20 февраля 2012

Хорошо - я смотрел на шаблон проектирования MVC, и мне нужно уточнить, как он должен работать.Я много читал, но, поскольку я новичок в DP, для меня все нечетко.

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

Контроллер будет обрабатывать обработку - работать с формами, получать данные из модели и т. Д.

Проблема для меня - представление.Допустим, я просматривал набор результатов из запроса к базе данных.При циклическом просмотре результатов мне может понадобиться выполнить if / else.Теперь, как правило, кажется, что это будет сделано в представлении - но это кажется мне нелогичным.Как только вам нужно начать выполнять такие проверки в представлении, кажется, что представление больше не просто для представления, а для обработки логики, как это делает контроллер.Я также представляю, что это может привести к беспорядочному коду в View, но это другой вопрос.

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

Я пометил это с помощью PHP, так как это основной язык, с которым я работаю.

Ответы [ 5 ]

2 голосов
/ 20 февраля 2012

Разработчик ASP .NET MVC здесь, но я не уверен, что это имеет значение, учитывая природу вопроса.

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

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

Я бы сказал, что это применимо ко многим простым условным логикам отображения.

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

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

1 голос
/ 20 февраля 2012

Как правило;по вашему мнению, единственная допустимая логика - это логика представления.Так что это вполне допустимо, и вы встретите такую ​​логику почти во всех приложениях MVC;

<?php 
// assuming you have an array with data you want to display
foreach($array as $value):
    if($value < 0):
        $extrastyle = ' style="color: red"';
    else:
        $extrastyle = '';
    endif;
    ?>
    <span<?php echo $extrastyle; ?>><?php echo $value; ?></span>
<?php endforeach; ?>

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

- обратите внимание, что я намеренно использовал альтернативную запись (if(expr): и endif;), так как это своего родасоглашение использовать эту запись в представлениях (используя php).Конечно, вы можете использовать стандартные обозначения.Далее я бы посоветовал использовать троичный оператор ($extrastyle = ($value < 0): ' style="color: red"':'';)

0 голосов
/ 20 февраля 2012

В MVC представления должны быть максимально тупыми, контроллеры должны быть худыми, а модели - толстыми.

Если необходимо написать оператор if/else в представлении большинства MVC Framework "Помощники" (например, в ASP.NET есть HtmlHelpers), которые помогают скрыть условный оператор.

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

Предлагаю прочитать статью Джеффа Этвуда

0 голосов
/ 20 февраля 2012

Я думаю, что вы применяете слишком строгое определение для MVC.В случае веб-страниц у вас обычно есть два соображения для «контроллера»: серверная сторона или сторона клиента.

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

Кроме того, можно утверждать, что сами данные могут инициировать условный контекст: если данные a, то делать b.Это могут быть условия внутри модели.

Дело в том, что не совсем понятно, что вы делаете.

0 голосов
/ 20 февраля 2012

То, как код распределяется между представлением и контроллером, очень сильно зависит от используемой реализации MVC (фреймворка).

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

...