gpt4 book ai didi

ruby-on-rails - 在 Ruby on Rails 中重用 Controller 之间代码的最佳实践

转载 作者:数据小太阳 更新时间:2023-10-29 06:18:54 27 4
gpt4 key购买 nike

我想分享一些 Controller 方法。在 ruby​​ on rails 中执行此操作的最佳做​​法是什么?我应该创建一个我的 Controller 扩展的抽象类,还是应该创建模块并将其添加到每个 Controller 中?以下是我想分享的 Controller 方法:

def driving_directions
@address_to = params[:address_to]
@address_from = params[:address_from]
@map_center = params[:map_center_start]

# if we were not given a center point to start our map on
# let's create one.
if !@map_center && @address_to
@map_center = GeoKit::Geocoders::MultiGeocoder.geocode(@address_to).ll
elsif !@map_center && @address_from
@map_center = GeoKit::Geocoders::MultiGeocoder.geocode(@address_from).ll
end
end

def printer_friendly
starting_point = params[:starting_point].split(',').collect{|e|e.to_f}
ne = params[:ne].split(',').collect{|e|e.to_f}
sw = params[:sw].split(',').collect{|e|e.to_f}
size = params[:size].split(',').collect{|e|e.to_f}
address = params[:address]

@markers = retrieve_points(ne,sw,size,false)
@map = initialize_map([[sw[0],sw[1]],[ne[0],ne[1]]],[starting_point[0],starting_point[1]],false,@markers,true)
@address_string = address
end

最佳答案

在我看来,正常的 OO 设计原则适用:

  • 如果代码真的是一组不需要访问对象状态的实用程序,我会考虑将它放在一个模块中以单独调用。例如,如果代码都是映射实用程序,则创建一个模块 Maps ,并访问以下方法:Maps::driving_directions .
  • 如果代码需要状态并且在每个 Controller 中使用或可以使用,请将代码放在 ApplicationController 中。
  • 如果代码需要状态并且在逻辑上密切相关的所有 Controller 的子集中使用(即所有关于 map ),则创建一个基类 (class MapController < ApplicationController) 并将共享代码放在那里。
  • 如果代码需要状态并且在不是很密切相关的所有 Controller 的子集中使用,请将它放在一个模块中并将其包含在必要的 Controller 中。

在您的情况下,方法需要状态 ( params ),因此选择取决于需要它的 Controller 之间的逻辑关系。此外:

还有:

  • 尽可能对重复代码使用分部,并将其放置在公共(public)“分部”目录中或通过特定路径包含。
  • 尽可能(对于方法)坚持使用 RESTful 方法,如果您发现自己创建了很多非 RESTful 方法,请考虑将它们提取到它们自己的 Controller 中。

关于ruby-on-rails - 在 Ruby on Rails 中重用 Controller 之间代码的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/128450/

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