-4

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

Я могу понять, что все шаблоны (шаблоны электронной почты, шаблон сайта, шаблоны SMS, JSON для ajax и т. Д.) Принадлежат View. Также к контроллеру относятся такие вещи, как проверка разрешения пользователя (например, на страницах администратора), запрос маршрутизации и т. Д. И такие действия, как сохранение/извлечение/удаление данных базы данных, относятся к модели. Наконец, ViewModels - это классы, которые вызываются представлениями для получения данных из моделей и виртуальных машин, и идут в папку рядом с «Виды, модели и контроллеры».

Но где я должен класть такие классы, как Autoloader, Configuration, SendMail, SendSms, ReadMail, ReadSms, Auth, Request, Hash, Encryption, Validator, SessionHandler, ErrorHandler, CacheHandler, Notification, Chat, DB Migration и тысяча других ?

Я ищу окончательный справочник: как определить, что класс foo принадлежит M, V, C или VM, и в каком месте/пространстве имен это помещается?

P.S. Я просто ищу технически независимый стандарт. Независимо от того, как Laravel или ZF или какие-либо другие структуры внедрили MVC.

Спасибо.

+0

MVC - это модель взаимодействия с пользователем, это не означает, что каждый класс вашего приложения попадает в MVC. – dmitry

+0

Спасибо, @dmitry, вы говорите, что эти классы должны идти в отдельной папке/пространстве имен, таком как утилита \ Autoloader {}, какая утилита находится в том же пространстве/папке пространства имен, что и M, V, C и VM? – David

+0

Я имею в виду, что у вас может быть любое количество других объектов кода, чем все, что вы можете поместить в MVC. Например, Autoloader - что он делает с MVC? Ничего, он загружает классы, что является исключительно низкоуровневой задачей, не связанной с архитектурой MVC как таковой. То же самое для большинства классов, которые вы указали в своем вопросе. Они прекрасно могут входить в отдельные папки и пространства имен, но не обязательно. Определенные варианты размещения имен и файлов зависят от многих проблем, но основное мое сообщение было: ни один класс в вашем приложении не является частью дизайна MVC. – dmitry

ответ

2

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

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

Laravel рассматривает модели как место для реализации операций CRUD, но вам не хватает бизнес-логики, которой у вас может не быть в модели, и вы не хотите ее в контроллере. В этом случае вы можете создать отдельный контекст, каталог, в котором вы можете хранить классы с кодом, который будет использоваться через несколько контроллеров.

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

+0

Спасибо за ответ, я хочу создать небольшую структуру для своего веб-журнала и будущих проектов, и мне просто интересно, как отделить эти классы. – David

+0

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

+0

Спасибо за объяснение. Поэтому я должен сохранить эти классы в отдельном пространстве имен/папке, таком как утилита \ Autoloader, какая утилита представляет собой папку/пространство имен с тем же уровнем, что и M, V, C и VM, правильно? Можно ли ставить такие классы, как Autoloader, которые используются только самим фреймворком, и SendMail, который используется программистом в том же пространстве имен/папке? – David