Общий на mvc … контроллер должен передать данные, чтобы просмотреть или просмотреть, должен захватить его непосредственно из модели?

Я создал и использовал свои собственные универсальные классы представления, определяя __call__ , таким образом, экземпляр класса является вызываемым. Мне действительно нравится он; в то время как универсальные представления Django позволяют некоторую настройку через аргументы ключевого слова, OO универсальные представления (если их поведение разделяется на многие отдельные методы), может иметь намного более мелкомодульную настройку через разделение на подклассы, которое позволяет мне повторить меня намного меньше. (Я устаю от перезаписи того же, создают/обновляют логику представления каждый раз, когда я должен настроить что-то, что универсальные представления Django не вполне позволяют).

я отправил некоторый код в djangosnippets.org .

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

ОБНОВЛЕНИЕ : Django, собственный универсальные представления , теперь основан на классах.

ОБНОВЛЕНИЕ : FWIW, я изменил свое мнение об основанных на классах представлениях, так как этот ответ был записан. Используя их экстенсивно на нескольких проектах, я чувствую, что они имеют тенденцию вести для кодирования, который является с удовлетворением DRY для записи, но очень трудно читать и поддержать позже, потому что функциональность распространена через такое количество различных мест и подклассов, так зависят от каждой детали реализации суперклассов и mixins. Я теперь чувствую, что TemplateResponse и просматривает декораторов, лучший ответ для разложения кода представления.

10
задан spirytus 4 December 2009 в 23:27
поделиться

7 ответов

Лично я всегда был сторонником №3. Представление не должно заботиться о контроллере. В этом отношении представление не должно зависеть от контроллера. Он должен делать то, что должен, показывать вид модели.

Базовый поток управления должен быть таким: Контроллер получает запрос от браузера. Он вносит любые обновления в модель, если это актуально, а затем выбирает представление. Затем управление передается представлению, которое получает данные из модели и отображает их.

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

Лично я считаю MVC слишком утомительным, и поэтому я обычно объединяю Контроллер и Просмотр больше, чем это. Но тогда это не совсем MVC.

5
ответ дан 3 December 2019 в 14:43
поделиться

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

0
ответ дан 3 December 2019 в 14:43
поделиться

Лично я всегда был сторонником №2. Представление не должно заботиться о модели. В этом отношении представление вообще не должно иметь никакой обработки. Он должен делать то, что должен, форматировать данные.

Базовый поток управления должен быть таким: Контроллер получает запрос от браузера. Он обрабатывает запрос, решает, какие данные необходимы, и извлекает их из модели / моделей. Затем он передает данные в представление, которое форматирует данные и отображает их.

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

14
ответ дан 3 December 2019 в 14:43
поделиться

Web MVC и Desktop MVC - два очень разных существа.

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

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

Вариант № 2 не является MVC. Это MVP, в котором презентатор является посредником.

Контроллер имеет доступ для записи к модели; Просмотр имеет доступ только для чтения.

5
ответ дан 3 December 2019 в 14:43
поделиться

Это очень интересный вопрос. По моему опыту, большинство реализаций на php присваивают представлению переменную модели:

$this->view->my_property = $modelObj->property

Это обычная практика. Обычно это объясняется тем, что если вы отправляете объект, вы можете вызывать методы, которые изменяют объект из представления.

//in the controller file
$this->view->myObject = $modelObj;

//in the view file, you could call an object modifying method
$this->myObject->delete();

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

При этом. Я не согласен с общепринятой практикой и склонен назначать вид целиком и отображать его оттуда. И просто приучите себя не делать там операций.

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

4
ответ дан 3 December 2019 в 14:43
поделиться

Я думаю, что это просто общий спор о том, что лучше «толкать» или «тянуть» модель. Не существует "абсолютно" лучшего решения.

2
ответ дан 3 December 2019 в 14:43
поделиться

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

MVC
Model -- Data store, alerts Views of changes
View -- Displays model, provides hooks for user interaction
Controller -- Handles user input

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

В веб-приложении MVC означает MVT (Model-View- Template)

Model -- Strictly a data store, typically an ORM solution
View -- Handles web requests, provides for user input/output
Template -- Actually displays content (HTML, Javascript, etc.)

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

1
ответ дан 3 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: