Модели в Symfony2 и другие среды MVC?

Я пытаюсь понять, как модели работают в правильном MVC.

Насколько я знаю, модели в MVC - это то, где происходит логика приложения, Модели - это мясо или задняя кость MVC. Представления - это просто презентация, а контроллеры - это "клей", который просит модели выполнять некоторые действия, возвращать некоторые данные и передавать эту информацию в представление, представленное пользователю.

Теперь я изучаю всевозможные структуры MVC и хотел бы понять, как использовать модели в MVC. Symfony 2 - интересная структура, поскольку модели идут, поскольку нет моделей:)

У меня проблемы с некоторыми функциями Symfony2, и где модели подходят в Symfony2 MVC.

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

Итак мои вопросы:

  • В Symfony2 у нас есть Entities и Services, это две модели в Symfony?
  • В чем разница в службах Symfony2 и веб-сервисах?

Итак, мои вопросы: где находится модель в Symfony2? Поскольку Model - это слой, состоящий из объектов Domain и Data Mappers, тогда я могу предположить, что Entities являются объектами Domain, а Doctrine - Data Mapper, это правильно?

А где работают службы Symfony2?

Ответ 1

  • Symfony2 не имеет традиционной "модели" части MVC, как это делают другие фреймворки. Даже Entities/Documents из ORM/ODM Doctrine не являются частью самой структуры и не зависят от Symfony2.

    Как писал Fabie (создатель структуры Symfony) в своем блоге ,

    "Вам решать создать вашу модель вручную или использовать любой другой инструмент, как ORM"... "Мне не нравится MVC, потому что это не то, как работает веб. Symfony2 - это инфраструктура HTTP; это структура запроса/ответа".

    Мне было трудно понять только чтение, но я понял, что он имел в виду, когда я начал программировать в Symfony2.

    Служба в Symfony2 с другой стороны - это просто объект, который выполняет глобальную задачу. Router, doctrine, logger, mailer - это некоторые из многих сервисов, которые поставляются с предустановленной Symfony2. Вы можете получить доступ к службам из любой части вашего кода.

  • Услуги Symfony2 полностью отличаются от служб Интернета. Услуги Symfony2 предназначены для использования в вашей системе, тогда как веб-службы предназначены для использования, например, с машины на машину через REST api. Хотя, я думаю, вы могли бы создать RESTful api как часть вашего сервиса.

Ответ 2

"Мне не нравится MVC, потому что это не то, как работает веб. Symfony2 - это инфраструктура HTTP, это структура запроса/ответа".

Я не согласен с этим утверждением полностью. MVC определенно подходит для Интернета, если вы посмотрите на него правильным способом.

1) Запрос HTTP принимается контроллером.

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

3) Когда модель закончили, Контроллер создает экземпляр представления, вставляет данные из Модели (моделей), затем активирует метод, который преобразует данные в HTML.

4) Контроллер берет результат из представления и отправляет его обратно клиенту в качестве ответа HTTP.

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

Ответ 3

Я не знаю Symfony, но я уже использую другие рамки MVC (grails, codeigniter).

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

Службы, возможно, более зависимы от Symfony. Сравнивая с Grails, сервисы - это компоненты, в которые вы помещаете свой бизнес-код. В Java EE это Beans. Обратите внимание, что служба может стать веб-службой, но она не является обязательной. Служба может также вызываться контроллером, чтобы выполнить некоторые вычисления перед визуализацией представления.

Я надеюсь, что мой ответ может помочь.