WedX - журнал о программировании и компьютерных науках

Symfony2 и концепция модели представления MVC

Я думаю, что в Symfony2 отсутствует концепция ViewModel (например, ASP.NET MVC Framework), то есть модели, связанной с представлением. Symfony2 (в документации) обычно назначает массив представлению.

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

В любом случае, есть ли какое-либо соглашение о том, куда должны идти модели представлений в Symfony2? Какая-то конкретная папка? К настоящему времени у меня есть:

Symfony2/src/MyCompany/MyBundle/Form/Model

который содержит модели, связанные с формами. И:

Symfony2/src/MyCompany/MyBundle/Entity

для объектов домена (привязанных к таблицам базы данных).

Предложения очень ценятся. А Symfony2/src/MyCompany/MyBundle/Model?


  • Не обязательно реализовывать MVC, чтобы иметь ViewModel, поэтому вместо того, чтобы отсутствовать, я бы сказал, что у него его нет или он не заставляет вас его использовать. См.: en.wikipedia.org/wiki/Model_View_ViewModel. 19.05.2012

Ответы:


1

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

Сущности не являются моделями. Как вы сказали, это объекты, управляемые доктриной, или объекты предметной области. Если вы хотите иметь бизнес-модели, поместите их в MyBundle/Model, как это делают многие другие пакеты (например, FOSUserBundle< /а>).

17.05.2012
  • Звучит отлично. Но все же я рассматриваю сущности как модели во многих ситуациях. В любом случае, спасибо, я сделаю, как это делает fosuserbundle. 17.05.2012
  • Если вы говорите о модели предметной области, то да, сущность — это элемент вашей модели предметной области. 23.05.2012
  • @wilmoore Да, если вы не хотите поддерживать два типа баз данных для своей сущности. Вы можете добавить Doctrine ODM, где не существует сущности, а есть только документы. Если вы используете модели для модели предметной области, все, что вам нужно сделать, это изменить базовый объект, который реализует в ваших моделях элементы, связанные с ORM. 23.05.2012
  • Это просто немного плохой терминологии со стороны Doctrine. Во всей документации по ODM они говорят о постоянных моделях; однако в твердой архитектуре модель на самом деле представляет собой набор вещей, которые моделируют ваш бизнес. Они относятся к постоянным моделям, но более точным термином будет постоянный объект. Пример здесь: docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/ говорит о Пользователе, и, учитывая, что Пользователь однозначно идентифицирован, он является Сущностью независимо от того, где вы Сохраняетесь. 23.05.2012
  • @wilmoore Нет, терминология хороша, но термины очень перегружены. Модель сохраняемости — это набор объектов, которые сопоставляются с базой данных. В Doctrine ORM они также называются сущностями, в ODM — документами. Модель домена — это набор вещей, которые соответствуют потребностям бизнеса. Это отдельные концепции, но они могут быть реализованы в одном и том же объекте. 23.05.2012
  • @meze Я согласен с тем, что термины перегружены, и поэтому трудно выбрать то, что нам обоим удобно. Вы исходите из терминологии Doctrine, и в большинстве случаев этого достаточно, чтобы не слишком педантично относиться к этому :) 23.05.2012

  • 2

    На самом деле не имеет значения, где вы разместите свой ViewModel..., если ваше пространство имен отражает его местоположение.

    Я бы поместил его в src/MyCompany/MyBundle/View/Model, и тогда ваше пространство имен было бы MyCompany\MyBundle\View\Model.

    17.05.2012
    Новые материалы

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]