我的最佳方式之间徘徊,以实现此服务:依赖注入的正确实施
目前我有这样的:
class ReissueInvoices
def initialize(registration, invoice_gateway, invoice_generator)
@registration = registration
@invoice_gateway = invoice_gateway
@invoice_generator = invoice_generator
end
def call
void_current_invoices
regenerate_invoices
create_third_party_invoices
end
private
attr_reader :registration, :invoice_gateway, :invoice_generator
def void_current_invoices
registration.invoices.each do |invoice|
unless invoice.paid?
invoice_gateway.void_invoice(invoice)
end
end
end
def regenerate_invoices
invoice_generator.call(registration)
end
def create_third_party_invoices
invoice_gateway.create_invoices(registration)
end
end
,我把这个(通常是从我的控制器)是这样的:
ReissueInvoices.new(@registration, InvoiceGateway.new, InvoiceGenerator.new).call
我明显有一个InvoiceGateway,InvoiceRegistration类,并将它们作为依赖项传递给我的ReissueInvoices类。
这是做事情的最佳方式吗?这是否正确实施了依赖注入?或者我应该改变我的ReissueInvoices类像这样的初始化方法去除参数和添加私有方法来创建和访问invoice_generator和invoice_gateway对象:
class ReissueInvoices
def initialize(registration)
@registration = registration
end
def call
void_current_invoices
regenerate_invoices
create_third_party_invoices
end
private
attr_reader :registration
def invoice_gateway
@invoice_gateway ||= InvoiceGateway.new
end
def invoice_generator
@invoice_generator ||= InvoiceGenerator.new
end
.....
,并调用它像这样
ReissueInvoices.new(@registration).call
最后,你们怎么想的初始化定义这样的默认参数的:
def initialize(registration, invoice_gateway=InvoiceGateway.new, invoice_generator=InvoiceGenerator.new)
@registration = registration
@invoice_gateway = invoice_gateway
@invoice_generator = invoice_generator
end
是好是坏?
感谢,
马特