将MVC架构理解为非MVC开发人员

时间:2010-08-17 12:37:45

标签: ruby-on-rails model-view-controller

我对理解MVC架构有疑问。 并不是我对MVC一无所知。在MVC架构中,一切对我都有意义,但如果我想开始在MVC架构中开发我的应用程序,我就会陷入困境。

基本上有很多方法可以在编程世界中做你想做的事情但是我想按照它应该做的那样去做。 所以也许有人可以帮助我。

但这是我最近的MVC问题:

我想在Ruby on Rails中编写自己的博客。我认为这不是什么大不了的事。 我会有我的模型,如文章,评论,用户等等。对于他们每个人,我会创建一个控制器来管理他们和所有。 问题在于管理员面板。我希望文章只能在Admin-Panel中创建。

那我该怎么办? 我是否应该创建一个Admin-Panel控制器来管理所有那些只能在Admin-Panel中完成的任务? 否则我认为单个控制器太多了。

我希望我的网址看起来像这样:

对于Admin-Panel任务:example.com/admin/article/create 对于观看者:example.com/article/show

(我觉得宁静的Rails路线看起来不一样,但我觉得你得到了我想要的东西)

您将如何在MVC架构中完成此任务,该如何完成? 你能帮助更好地理解那些MVC任务吗?

提前谢谢。

2 个答案:

答案 0 :(得分:4)

制作管理区时要记住的两件事是 1)您可以为路由创建名称空间以获取您正在查找的/ admin URL 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等。我还假设您可能需要“仪表板”,所以我我正在设置一个指向Admin :: 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”创建一个相应的目录,你很高兴 - 一切都是命名空间,而视图/控制器就像你想象的那样。

您可以随时运行“佣金路线”以查看所有管理路线。

希望有所帮助!

答案 1 :(得分:0)

您所描述的内容听起来像Cross-cutting concern的一个很好的例子。具体而言,用户认证是一个影响许多其他问题的问题。在您的情况下,用户权限会影响文章的发布,但将来有理由认为它可能会影响评论的控制,类别的添加等。

在这种情况下,最好将控制器中的逻辑保留在解决主要问题(即创建文章属于文章控制器),并将身份验证和角色安全性卸载到其他控制器可以使用的模块。这使您可以将文章代码集中在一个控制器中,并且还允许您将来在其他控制器中添加角色级安全性,而无需进行重大的重构。

Rails中有各种用于身份验证和角色级别安全性的插件。我会做一些研究,找到最适合你需求的研究。