Рекомендации PHP MVC/ "Правила" для успеха
Я уверен, что кто-то уже разместил этот вопрос; однако, я хотел бы получить все рекомендации для MVC на PHP. Я знаю, что есть много экспертов, которые хотят поделиться своими знаниями с людьми, которые сомневаются в своих лучших методах кодирования.
- Как организовать свой контроллер?
- Как организовать свою модель?
- Должен ли контроллер вызывать один метод модели и подсистемы вызова модели или должен ли контроллер вызывать все подметоды модели?
- и др.
Надеюсь, что это поможет кому-то (потому что это поможет мне точно).
Ответы
Ответ 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