gpt4 book ai didi

ruby-on-rails - Rails 中的胖 Controller

转载 作者:行者123 更新时间:2023-12-04 05:30:26 25 4
gpt4 key购买 nike

我开始在 railstutorial.org 完成教程
接触框架。我的 Controller 还不是很可怕,但我可以
看到Single Responsibility Principal(SRP)没有在整个教程中应用,因为它超出了教程的范围。

我有这个 relatively simple controller here .我已经可以看到不同的问题(例如身份验证和授权)泄漏到这个 Controller 中,其中包含太多的操作。这会为一个 Controller 分配过多的操作。
我偶然发现 rails focused controllers这解决了这些问题之一
看起来很有趣。

这是一个常见的解决方案吗?或者有更好的解决方案吗?

在 .net 世界中,我们倾向于使用 aspect oriented programming(AOP)
实现更清洁 Separation of Concerns (SoC) .然而,最近有几个人写了一个新的前端 Controller 框架,名为 Fubu Behaviours .它很好地捕捉了请求管道的概念。对我来说越来越有意义的东西。

为了处理请求,我们倾向于在之前(有时
after) Action 被执行。在某些情况下,有条件地结束请求。使用行为、管道或俄罗斯娃娃模式之类的东西似乎很自然。
因此,链条中的每个环节都负责继续或停止。继承似乎不是最好的解决方案。

有没有类似于 rails 的东西?在 Rails 中有意义吗?

推荐阅读也同样受欢迎!

最佳答案

我同意你拥有像is_admin这样的授权功能。和 correct_user有点代码味道。我会移除它们并使用我经常使用的名为 CanCan 的 gem 更好地处理它。 .

它允许您将所有授权规则从 Controller 移到 list (即能力模型)中,只需要您的 Controller 通过 authorize_resource 启动授权检查调用您的 Controller 。然后你可以在你的 ApplicationController 中处理简单的重定向:

class ApplicationController < ActionController::Base
rescue_from CanCan::AccessDenied do |exception|
if current_user
redirect_to signin_url, :alert => exception.message
else
redirect_to root_path, :alert => exception.message
end
end
end

除此之外,我会移动所有 @user = User.find(params[:id])调用 before_filter,并清理你的缩进和你的 Action 顺序(应该是 indexnewcreateshowedit 、 |10454|7 |10454|7 和 |10454|7)会很好而且很瘦。

关于ruby-on-rails - Rails 中的胖 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12697780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com