Архитектура MVC и слабо типизированные языки (например, PHP). Модель не нужна? - PullRequest
0 голосов
/ 01 марта 2012

Разве модели не должны просто описывать данные, которые будут передаваться из контроллера в представление?Разве это не делает модели ненужными в слабо типизированных языках?В PHP они выполняют работу с БД в моделях, но не так ли это?На мой взгляд, модели в языках со слабой типизацией просто не нужны ...

Ответы [ 4 ]

2 голосов
/ 01 марта 2012

Есть некоторые неправильные представления о термине модель.Microsoft MVC3 Framework имеет концепцию модели представления, которая представляет собой просто данные, которые вы используете для визуализации ваших представлений.Это не то, что М означает именно в MVC.Модель включает в себя ваши бизнес-объекты.У нас есть тонкие контроллеры и толстые модели, но очень тонкие модели.Наши контроллеры осуществляют вызовы к службам, которые выполняют бизнес-логику, а контроллеры никогда не выполняют эту логику самостоятельно.Затем мы переводим наши бизнес-объекты (наши модели данных) и преобразуем их в упрощенную модель представления, которая может использоваться для визуализации представления.

Итак, чтобы ответить на ваш вопрос

Следуетмодель просто описывает данные, которые будут переданы от контроллера к представлению?

Тогда, возможно, то, что вы действительно спрашиваете, не являются ли модели представления ненужными?Я не уверен, почему ты так думаешь.Посмотреть модель + вид дает результат.В PHP может быть полезно определить класс с легко доступными свойствами.Это просто разумно для разъяснения ваших ожиданий и не позволяет вам вызывать методы с ужасно длинными наборами или аргументами.В JavaScript нет необходимости определять модель представления как таковую, вы просто помещаете свойства в новый объект и передаете его вместе со своим представлением в логику визуализации представления.Это больше отражает шаблон ОО, который используют эти языки, а не тот факт, что они слабо типизированы.

Если вы спрашиваете, не нужна ли модель, значит, вы упустили цель архитектуры MVC.Большая часть MVC состоит в том, что вы разделяете свои интересы.Зачем применять какую-либо архитектуру к вашему коду?Я уверен, что вы можете найти лучшее объяснение мотивации MVC, чем я могу дать вам.

1 голос
/ 01 марта 2012

Модель - это полезный концептуальный инструмент, даже если в PHP нет необходимости отделять ее от кода БД, например. Вы можете иметь объект данных, связанный с каждой таблицей, которая инкапсулирует некоторую бизнес-логику, или определить набор бизнес-объектов, которые объединяют данные по таблицам в доменные объекты, которые затем могут использовать контроллеры, или просто иметь один объект DB монстра, который имеет все функции доступа и возвращает объекты. Это имеет определенные преимущества по сравнению с непосредственным использованием кода БД контроллерами:

  • Если вы определяете сложные структуры данных, которые работают в таблицах БД, вы не хотите делать это в коде контроллера из-за риска дублирования - гораздо лучше иметь одно определение, обеспечивающее согласованность во всей системе. Хотя это может вводить зависимости, наличие одной функции / объекта, которая определяет эти данные, позволяет легко определить, где используются данные, чтобы вы могли что-то исправить.
  • Стороннее сопровождение гораздо проще, если в одном месте найти все определения структуры данных.
  • Упрощает модульное тестирование, если вы можете поменять всю модель или ее части и заменить их фиктивными объектами, которые будут предоставлять данные теста
  • Это делает контроллеры легче и, следовательно, более удобочитаемым и обслуживаемым

Так что вы можете утверждать, что в этом нет необходимости, но это очень помогает.

0 голосов
/ 01 марта 2012

Пока у вас есть некоторая абстракция поставщика данных.Некоторые модели выполняют проверку низкого уровня (тесно связанную с механизмом хранения - нулевые проверки и т. Д.), Но контроллер "должен" выполнить всю бизнес-логику / проверку.

У меня лично есть тонкий класс, подобный классу, которыйсопоставлены с каждой таблицей (все реализации IDataStruct).Эта структура или ее коллекция - единственное, что перемещается между DomainObject и DataProvider.Затем я могу через свой интерфейс принудительно установить, какой тип данных я должен получить.Это не серебряная пуля, но я считаю, что она хорошо работает (делает такие вещи, как кэширование и модульное тестирование, довольно легкими)

Надеюсь, это не смутило проблему.

0 голосов
/ 01 марта 2012

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

...