代码之家  ›  专栏  ›  技术社区  ›  OemerA

将MVC体系结构理解为非MVC开发人员

  •  3
  • OemerA  · 技术社区  · 14 年前

    我对MVC体系结构的理解有问题。 不是我对MVC一无所知。在MVC体系结构中,一切对我来说都是有意义的,但是如果我想开始在MVC体系结构中开发我的应用程序,我就陷入了困境。

    基本上,在编程界,有很多方法可以实现你想要的,但是我想像以前那样做。 也许有人能帮我。

    但我最近对MVC的问题是:

    我想用RubyonRails写我自己的博客。我觉得这没什么大不了的。 我会有我的模型,比如文章、评论、用户等等。对于其中的每一个,我都会创建一个控制器来管理它们和所有的。 问题出在管理面板上。我希望只能在管理面板中创建一篇文章。

    那我该怎么办? 我应该创建一个管理面板控制器来管理所有那些只能在管理面板中完成的任务吗? 否则我认为对于一个控制器来说太多了。

    我希望我的URL看起来像这样:

    对于管理面板任务:example.com/admin/article/create 对于观众:example.com/article/show

    (我认为宁静的铁路路线看起来不一样,但我认为你得到了我想要的)

    您将如何在MVC体系结构中完成此任务,以及应该如何完成此任务? 您能帮助更好地理解这些MVC任务吗?

    提前谢谢。

    2 回复  |  直到 14 年前
        1
  •  4
  •   trevrosen    14 年前

    在创建管理区域时要记住的两件事是 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”创建一个相应的目录,这样做很好——所有的东西都有名称空间,视图/控制器的行为都会像您想象的那样。

    您可以始终运行“rake routes”来查看所有管理路由。

    希望有帮助!

        2
  •  0
  •   Ryan Brunner    14 年前

    你所描述的听起来像是 Cross-cutting concern . 具体来说,用户身份验证是一个影响许多其他问题的问题。在您的案例中,用户权限会影响文章的发布,但在将来,假设它可能会影响评论控制、类别添加等内容是合理的。

    在这种情况下,最好在处理 初级的 关注点(即,创建一个项目将属于项目控制器),并将身份验证和角色安全卸载到一个附加模块上,您的控制器都可以使用该模块。这允许您将项目代码集中在单个控制器中,并且允许您将来在其他控制器中添加角色级别的安全性,而无需进行重大的重构。

    Rails中有各种各样的身份验证和角色级别安全插件。我会做一点调查,找到一个最适合你需要的。