私は.NETの世界から来ており、多層アプリケーションで層をまたがってオブジェクトを渡すために 'Rails Way'が何を出すのか把握しようとしています。マルチ(論理)層にオブジェクトを渡すための 'Rails Way'は何ですか?
私はマルチキャリアプライシングAPIを作成しています。基本的に私の価格コントローラで、私は次のパラメータへのアクセス権を持っているのparams [:キャリア]、のparams [:address_from]、のparams [:address_to]、のparams [:CONTAINER_TYPE]、など私が検証を持っていますライブラリ、コンプライアンスライブラリ、および価格決定ライブラリから構成され、それぞれがパラメータのサブセットを処理します。
.NETでは、パラメータはデータ転送オブジェクト(DTO)または契約にエンパセスされます。いずれかのライブラリを呼び出す前に、それらはドメインオブジェクト(DO)に変換され、各ライブラリはDOで動作するため、DTOでの緊密な結合が回避されます。 Rubyのプログラミングでは「ダックタイピング」の使用を推奨しています。そのため、私のライブラリは(たとえあなたがシンボルにアクセスしてもオブジェクト/プロパティではなくても)直接paramsで動作することができます。または、私のパラメータをPriceRequestオブジェクトにマーシャリングし、私のライブラリをPriceRequest型で動作させる必要がありますか?
オプション1:
class PricesController < ApplicationController
def get
CarrierValidator.validate(params)
...
end
end
class CarrierValidator
def self.validate(params)
raise CarrierError if !Carrier.find_by_name(params[:carrier_name]).exists?
end
end
オプション2:
class PricesController < ApplicationController
def get
pricesRequest = PricesRequest.new(carrier_name: params[:carrier_name], ...)
pricesRequest.validate
...
end
end
class PriceRequest
attr_accessor : ...
def initalize
...
end
def validate
CarrierValidator.validate(self.carrier_name)
end
end
class CarrierValidator
def self.validate(carrier_name)
raise CarrierError if !Carrier.find_by_name(carrier_name).exists?
end
end
TIA、
J
ここにサンプルコードを投稿できますか? –