ruby-on-rails – 跨多个(逻辑)层传递对象的’Rails方式’是什么?

ruby-on-rails – 跨多个(逻辑)层传递对象的’Rails方式’是什么?,第1张

概述我来自.NET世界,我正在试图找出在多层应用程序中跨层传递对象的’Rails方式’. 我正在撰写多 *** 作符定价API.基本上在我的价格控制器中,我可以访问以下参数params [:carrier],params [:address_from],params [:address_to],params [:container_type]等.我有一个验证库,一个合规库和一个价格-finder库,每个处理一 我来自.NET世界,我正在试图找出在多层应用程序中跨层传递对象的’Rails方式’.

我正在撰写多 *** 作符定价API.基本上在我的价格控制器中,我可以访问以下参数params [:carrIEr],params [:address_from],params [:address_to],params [:container_type]等.我有一个验证库,一个合规库和一个价格-finder库,每个处理一个params的子集.

在.NET中,params将被包含在数据传输对象(DTO)或契约中.在调用任何库之前,它们将被转换为域对象(DO),并且每个库都可以在DO上工作,从而避免在DTO上紧密耦合. Ruby编程推荐使用’duck tyPing’,因此我的库可以直接在params上工作(即使你会访问符号而不是对象/属性).或者我应该将我的params编组到一个PriceRequest对象中并使我的库在PriceRequest类型上工作?

选项1:

class PricesController < ApplicationController  def get    CarrIErValIDator.valIDate(params)    ...  endendclass CarrIErValIDator  def self.valIDate(params)    raise CarrIErError if !CarrIEr.find_by_name(params[:carrIEr_name]).exists?  endend

选项2:

class PricesController < ApplicationController  def get    pricesRequest = PricesRequest.new(carrIEr_name: params[:carrIEr_name],...)    pricesRequest.valIDate    ...  endendclass PriceRequest  attr_accessor : ...  def initalize    ...  end  def valIDate    CarrIErValIDator.valIDate(self.carrIEr_name)  endendclass CarrIErValIDator  def self.valIDate(carrIEr_name)    raise CarrIErError if !CarrIEr.find_by_name(carrIEr_name).exists?  endend

TIA,
Ĵ

解决方法 你应该创建一个类型.我会使用ActiveModel来封装数据(属性)和业务逻辑(验证和可能是一些用于处理数据的特定于层的方法).

基本上,您希望能够在控制器中执行Rails-y *** 作,例如:

def get  price_request = PriceRequest.new(params[:price_request])  if price_request.valID?     # do something like redirect or render  else     # do something else  endend

所以你要声明:

class PriceRequest  include ActiveModel::Model  attr_accessor :carrIEr,:address_from,:address_to,:container_type  valIDates :carrIEr,presence: true  valIDate :valIDate_address_from  def valIDate_address_from    # do something with errors.add  end  # and so on

这是一个很好的起点:http://edgeguides.rubyonrails.org/active_model_basics.html

API中的更多细节:http://api.rubyonrails.org/classes/ActiveModel/Model.html

希望能指出你正确的方向……

总结

以上是内存溢出为你收集整理的ruby-on-rails – 跨多个(逻辑)层传递对象的’Rails方式’是什么?全部内容,希望文章能够帮你解决ruby-on-rails – 跨多个(逻辑)层传递对象的’Rails方式’是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1271182.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存