Пытаетесь понять модели MVC, совет? - PullRequest
3 голосов
/ 05 мая 2010

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

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

Итак ... а) что такое класс поиска, б) как я могу реализовать его в примере использования, в) Правильно ли то, что мне сказали о моделях, или есть лучший способ, чем "поиск"?

Советы очень ценятся:)

Ответы [ 4 ]

6 голосов
/ 05 мая 2010

Распространено заблуждение, что M в MVC - это просто база данных. Основная цель MVC - отделить уровень представления от остального приложения так, чтобы M не знал о VC.

V и C образуют пользовательский интерфейс, внешний уровень, с помощью которого пользователи могут взаимодействовать с вашим приложением. C обрабатывает все входные запросы от V и делегирует M, где это необходимо. V отображает изменения в M. В MVC на веб-основе V дополнительно разделяется по содержанию, представлению и поведению, например HTML, CSS и JavaScript.

Само приложение находится внутри М. Оно должно быть в состоянии работать изолированно от пользовательского интерфейса. Как таковой, он включает не только уровень доступа к данным, но практически все другие уровни, но уровень представления. Он может содержать, но не может содержать DAL, сервисные уровни, доменные объекты и т. Д. - все, что необходимо для вашего приложения, будь то получение данных из RSS-канала или отправка данных в веб-службу или отправка электронных писем или расчет дохода и т. Д.

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

Проверьте http://martinfowler.com/eaaCatalog/index.html для обзора.

0 голосов
/ 05 мая 2010

CakePHP говорит:

Модели представляют данные и используются в приложениях CakePHP для доступа к данным.Модель обычно представляет собой таблицу базы данных, но ее можно использовать для доступа ко всему, что хранит данные, такие как файлы, записи LDAP, события iCal или строки в файле CSV.

(http://book.cakephp.org/view/66/Models)

По сути, модель представляет собой постоянное хранилище ваших бизнес-данных. Как правило, это база данных.

Как только мы начинаем говорить о базах данных и объектах, она обычно попадает в сферу широко обсуждаемого объектареляционное отображение '- это то, сколько PHP-фреймворков реализуют Модели.

Модель обычно представляет строку в таблице, но это также может быть группа строк из нескольких таблиц. Модель может быть представлена ​​в бесконечном числеспособов: от чего-то сложного и раздутого, как объект Doctrine db, до чего-то такого же простого, как текстовый файл.

Мой предпочтительный способ представления моделей - одна строка на модель на главномтаблица объединена с любыми связанными родительскими таблицами и содержит объекты-члены любых дочерних таблиц. Единственный способ эффективно реализоватьЭто означает, что нужно использовать некоторый класс «Collection», чтобы все объекты могли быть извлечены одновременно, и чтобы вы не делали ненужных запросов.

Редактировать: Для прямого ответа на ваш вопрос, да,Класс "finder" или "Collection" абсолютно необходим, если вы хотите минимизировать количество обращений к базе данных.Если бы каждая модель была самодостаточной, вы бы выполняли сотни отдельных запросов «SELECT FROM table WHERE id = x».Искатель или Коллекция может просто ВЫБРАТЬ несколько строк и вывести данные в объекты модели.

0 голосов
/ 05 мая 2010

Ответ - старое «все зависит».

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

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

И я верю в это, почему фреймворки MVC, такие как Zend Framework, не предоставляют вам концепцию "Zend_Model". Ваши модели должны быть реализованы от случая к случаю.

0 голосов
/ 05 мая 2010

Вы можете реализовать искатели как статические методы класса модели:

$foo = ModelFoo::find($id)

...