Понимание архитектуры MVC как не-MVC-разработчика - PullRequest
3 голосов
/ 17 августа 2010

У меня проблема с пониманием архитектуры MVC.Дело не в том, что я ничего не знаю о MVC.Для меня все имеет смысл в архитектуре MVC, но если я хочу начать разработку своего приложения в архитектуре MVC, я застрял.

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

Но вот моя недавняя проблема с MVC:

Я хочу написать свой собственный блог на Ruby on Rails.Это не имеет большого значения, я думаю.Я хотел бы иметь свои модели, такие как статьи, комментарии, пользователя и многое другое.Для каждого из них я бы создал контроллер для управления ими и все такое.Проблема в том, что касается админ-панели.Я хочу, чтобы статья могла создаваться только в админ-панели.

Так что же мне делать?Должен ли я создать контроллер панели администратора для управления всеми этими задачами, которые вообще могут быть выполнены только в панели администратора?В противном случае я думаю, что это слишком много для одного контроллера.

Я хочу, чтобы мои URL выглядели примерно так:

Для задач панели администратора: example.com/admin/article/create ДляЗрители: example.com/article/show

(я думаю, что спокойные маршруты Rails выглядят по-разному, но я думаю, вы получите то, что я хочу)

Как бы вы выполнили эту задачу в архитектуре MVC икак это должно быть сделано?Можете ли вы помочь лучше понять эти задачи MVC?

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 17 августа 2010

При создании административной области следует помнить о двух вещах: 1) вы можете создавать пространства имен для маршрутов для получения искомых URL-адресов / admin и 2) у вас могут быть контроллеры, наследуемые от других потомков ActionController

Таким образом, чтобы создать область администратора, вы бы хотели, чтобы ресурсы RESTful были объявлены в пространстве имен (предполагается, что маршруты Rails 3):

# routes.rb
resources :users
resources :posts
resources :pages

namespace :admin do |admin|
  match '/' => 'dashboard#index'
  resources :users
  resources :posts
  resources :pages
end

Верхний набор - публичные, а нижний -дает вам маршруты администратора, такие как / admin / users / new и / admin / posts / 1 и т. д. Я также предполагаю, что вам может понадобиться «панель мониторинга», поэтому я настраиваю маршрут к методу index администратора:: DashboardController

Затем вы создаете базовый контроллер администратора, который происходит от ApplicationController.Используйте его для хранения макета области администратора и фильтров аутентификации:

class Admin::BaseController < ApplicationController
  before_filter :require_user
  layout 'admin'
end

Теперь создайте каталог в app / controllers под названием «admin».Сделайте там контроллеры как обычно, но пусть они наследуются от вашего базового контроллера:

# pages_controller.rb
class Admin::PagesController < Admin::BaseController
  # Controller code in here
end

Создайте соответствующий каталог в app / views для «admin», и все готово - все распределено по пространству имени представления / контроллеры будут вести себя так, как вы думаете.

Вы всегда можете запустить "rake маршруты", чтобы увидеть все маршруты администратора.

Надеюсь, это поможет!

0 голосов
/ 17 августа 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...