Rails 4.2干燥控制器

时间:2016-01-02 16:20:08

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

我有一个用户模型,可以通过REST API和ActiveAdmin访问。由于存在大量重复的代码(几乎所有代码),所以干涸可能是个好主意。有很多主题处理这个问题,但我没有找到正确的方式。我把我的一些想法放在下面

每个控制器中的UserController实例

再次创建重复的代码和函数

 #AA
 controller do 
  def create
   @userController = UserController.new
   @userController.create(params)
  end 
 end 


 #REST API
 #Create instance through callback
  def create
   @userController.create(params)
  end 

继承

我想通过继承这样的

让一个基本的CRUD控制器位于我的模型之上
Class BaseUserController < ApplicationController
Class Api::UserController < BaseUserController

但是(还)我还不知道在AA中如何做到这一点同时考虑到inherited_resource gem

关注

同样关注似乎是一种很好的方式。但是,我会为每个动作创建单独的关注点,以便有一个问题来准确处理一个行为 方面,也使它们更易于重复使用。这再次似乎不必要地膨胀应用程序,并且也没有真正使用这样的问题。 (?)

模块/混入

由于模块无法实例化但完全实现操作,这可能就是我想要的。因此,每个控制器都包含所需的操作或扩展到ma模型而不是类。

事情是 - 我读的越多,我就越困惑。我希望你们中的一些人可以帮助我带些亮点,或者我可能会转向黑暗面使用C#和。再次:D:D 提前谢谢!

示例代码

我在REST API和AA中都使用了这种创建方法来获取SMS资源,我调用了几个服务,但是如果复杂性增加,我必须在两个地方添加这些行。我怎么能避免这种情况?我有一个基本的SMSController,它从API端点和AA接口使用?

 controller do 
  def create
       @customer =Customer.find_by_phone(params[:sms_message][:phone])
 SmsService.sendSMS(@customer[:phone],Cryptoalgorithm.sms(@customer[:id],  @customer[:recharge_token],params[:sms_message][:text].to_i)
       @sms = SmsMessage.create(:customer_id => @customer[:id], :text => params[:sms_message][:text], :phone =>     params[:sms_message][:phone])
       @customer.increment!(:recharge_token)
       redirect_to admin_sms_message_path(@sms[:id])
       end
   end

0 个答案:

没有答案