1

我对限制重复代码的控制器结构有一些疑问。

例如,我想检索男人和女人。执行此操作的最佳方法是什么:

class User {

   public function men() {
       //render
   }

   public function women() {
       //render
   }

   //OR

   public function by_type($type) {
       //render
   }

}

这是一个简单的例子,但类型的数量可以增长。并且每种类型都可以有单独的视图。我正在寻找未来的扩展解决方案。这种使用情况的最佳实践。

谢谢

4

2 回答 2

0

据我了解您的问题,您可以通过by_type这种方式调用真正呈现函数内部类型的函数:

public function by_type($type) {
    if (method_exist($this, $type) {
        return call_user_func(array($this, $type));
    }
    else {
        throw new Exception('method do not exists!');
    }
}

这样你只需要编写渲染类型的方法并使用by_type方法调用它。

于 2013-11-08T09:09:04.280 回答
0

Rails 有一个(有点争议的)原理,叫做胖模型,瘦控制器,这基本上意味着您可以使用控制器来处理视图的逻辑,并让模型处理所谓的“繁重”


CakePHP / Rails

为了从 CakePHP 移植到 Rails,我强烈建议尽可能多地使用模型,因为它允许您创建一个利用服务器的完整性能结构的应用程序,而不仅仅是将所有逻辑留在控制器中,就像许多人使用 CakePHP 所做的一样

专门针对您的问题:

#app/controllers/users_controller.rb
def index
    @user = User.gender(params[:gender])
end

#app/models/user.rb
def self.gender(type)
    where?("type = ?", type)
end

这使您可以使控制器尽可能薄,从而允许在整个应用程序中正确分配代码

我认为 Rails 与 CakePHP 有很大不同,因为它可以帮助您创建真正功能强大且内容丰富的应用程序,这些应用程序利用整个服务器,而不仅仅是提供一个层来使网站动态化

于 2013-11-08T09:31:26.383 回答