@counterprowtf

Как реализовать комментарии на сайте на ООП с помощью MVC?

Надо реализовать комментарии на сайте на ООП с помощью MVC, мне получается надо создавать отдельно модель и контроллер комментариев?
  • Вопрос задан
  • 349 просмотров
Пригласить эксперта
Ответы на вопрос 3
@dimoff66
Кратко о себе: Я есть
Ну MVC это и предполагает - создание отдельно модели, отдельно представления и отдельно контроллера. Иначе это не будет MVC.
Ответ написан
Комментировать
@MadridianFox
Web-программист, многостаночник
Традиционно комментарии на сайтах относятся к чему-то. Например к статье, новости, файлу и т.д.
Это значит, что комментарии обычно находятся на странице с комментируемым объектом. Т.е. комментарии это не отдельный раздел и даже не самостоятельная страница, а лишь часть страницы.

С другой стороны MVC - это даже не шаблон проектирования, а нечто большее - это способ организации структуры программы. Обычно ВСЕЙ программы.

Таким образом, сделать по MVC только часть сайта... да что там сайта, часть страницы! не очень то возможно, т.к. традиционно одна страница - это один контроллер (Page Controller, который часто выражен методом определённого класса, тоже называемого контроллером).

Вы всё ещё можете создать модель комментариев. Даже можете красиво отделить представление комментариев. Но вот отдельный контроллер комментариев... это вряд-ли.

Но на самом деле всё зависит от используемого фреймворка и от технологий, с помощью которых вы эти комментарии будете делать.
Вдруг сайт написан на Symfony, а комментарии вы хотите подгружать по ajax? Тогда конечно и контроллер отдельный можно чисто для комментариев сделать.
Ответ написан
Комментировать
Nikolino
@Nikolino
Делают по-разному. Для каждой сущности можно создавать свой контроллер, а можно создать что-то обобщенное, вроде BlogController, и вписать методы работы с постами и комментариями туда. Тогда методы будут называться как-то так: addComment(), storeComment(), deleteComment(), addPost(), deletePost() и т.д.
Меньше контроллеров, но каждый из них "толще", что может несколько усложнить работу.

Если создавать отдельные контроллеры, например: CommentController, CategoryController, PostController и т.д., то методы обычно не включают в себя название сущности, чтобы не повторяться. То есть называем методы так: store(), update(), delete(). Для сохранения, обновления и удаления, соответственно.
Например, по-умолчанию комментарии не опубликованы, а вы из админки можете поменять их статус на "опубликован".
Соответственно вызывается путь в роутере, который обращается к update методу контроллера комментариев, обновляет статус на "опубликован" в базе, и редиректит туда, куда вам надо, например к списку всех неопубликованных комментариев в админке.
А при добавлении, допустим, поста, обращаемся через роутер к add() методу контроллера постов, который просто выводит форму поста, а вот сама форма при сабмите уже обращается к методу store() этого же контроллера постов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы