Подтвердить что ты не робот

Рекомендации PHP MVC/ "Правила" для успеха

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

  • Как организовать свой контроллер?
  • Как организовать свою модель?
  • Должен ли контроллер вызывать один метод модели и подсистемы вызова модели или должен ли контроллер вызывать все подметоды модели?
  • и др.

Надеюсь, что это поможет кому-то (потому что это поможет мне точно).

4b9b3361

Ответ 1

MVC - это самый непонятый шаблон дизайна. По определению одна модель.

Когда городской планировщик предлагает проект, он разрабатывает для него одну модель. Отдельные объекты, которые могут включать в себя модель: здания, улицы, парки, обычно не представлены отдельными моделями: все они являются гранями одной модели.

Итак, в MVC модель может состоять из разных сущностей, и это, вероятно, лучшее для нее слово: entity, как в сущности, представленной таблицей базы данных. Модель в MVC может даже быть чем-то более абстрактным, чем на самом деле представлена ​​в коде, а скорее концептуальным зонтиком для всех данных, на которые может потребоваться приложение.

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

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

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

Ответ 2

Я считаю, что блог относится к вашему вопросу.

https://r.je/

Том Батлер, автор блога, указывает, как большинство фреймворков MVC допускают взаимодействие model-view неверно и пытается объяснить В MVC представление должно получить доступ к модели напрямую, используя несколько примеров.

У него есть действительная точка, однако исходя из фона Rails, мне было трудно gulp получить идею view непосредственно к model.

Ответ 3

Я не уверен, что вы подразумеваете под "организацией".

Контроллер вызывает любую модель [s], необходимую для передачи информации в представление [s]. Он (контроллер) может совершать несколько вызовов модели для разных частей информации.

Попробуйте прочитать это: http://www.phpwact.org/pattern/model_view_controller

Ответ 4

Для php мне нравится использовать структуру CodeIgniter. Он закладывает основу для создания MVC. Контроллеры находятся в "/контроллерах", а модели находятся в "/models"

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

Ответ 5

Секреты MVC заключаются в том, что "М" МОДЕЛЬ должен быть создан и спроектирован как VIEWMODEL, а не простая модель.

Скажем, что у нас есть следующий пример: у нас есть форма, когда вставка объекта называется Customer:

Клиент

  • IdCustomer
  • Имя
  • SurName
  • Страна.

В правиле MVC говорится, что мы должны отправить Customer MODEL в представление. Однако скажем, что поле Страна заполнено списком. Затем мы должны отправить список страны в VIEW.

введите описание изображения здесь

Итак, у нас будет следующий VIEWMODEL

CustomerViewModel

  • Клиент
    • IdCustomer
    • Имя
    • SurName
    • Страна.
  • CountryList

Кроме того, обычно форма не такая простая, как поле, и не более того, она имеет кнопки, ярлык/сообщение и т.д. Он должен быть смоделирован в VIEWMODEL