2017-01-21 33 views
0

我一直在想,在初始化程序中獲取記錄很常見?導軌;在初始化程序中獲取記錄

這裏這是服務對象獲取記錄和生成的PDF收據文件的示例。

輸入是發票uuid,並獲取相關記錄,如卡明細,initialier內發票項目。

class Pdf::GenerateReceipt 
     include Service 

     attr_reader :invoice, :items, :card_detail 

     def initialize(invoice_uuid) 
     @invoice ||= find_invoice!(invoice_uuid) # caching 
     @items = invoice.invoice_items 
     @card_detail = card_detail 
     end 
     ..... 

     def call 
     return ReceiptGenerator.new(
      id: invoice.uuid, # required 
      outline: outline, # required 
      line_items: line_items, # required 
      customer_info: customer_info 
     ) 
     rescue => e 
     false, e 
     end 

    ..... 

     def card_detail 
     card_metadata = Account.find(user_detail[:id]).credit_cards.primary.last 

     card_detail = {} 
     card_detail[:number] = card_metadata.blurred_number 
     card_detail[:brand] = card_metadata.brand 
     card_detail 
     end 
    end 

Pdf::GenerateReceipt.('28ed7bb1-4a3f-4180-89a3-51cb3e621491') # => then generate pdf 

問題是如果記錄未找到,則會生成錯誤。 我可以在初始化程序內拯救,但是這似乎並不常見。

我該如何以更多的紅寶石方式解決這個問題?

回答

1

這主要是輿論和傳聞,但我寧願與遠鑄我的價值鏈向上越好。所以我會在這個對象前面找到發票,並將其作爲參數傳遞,與card_detail一樣。

如果你這樣做,在這個類中,它會限制責任,協調這兩個目標,這是測試的方式更方便,但也增加了,你必須在未來推理另一層。

那麼我將如何處理,分成4個獨立的東西

  1. 發票查找東西
  2. 卡拾取東西
  3. PDF生成是需要發票和卡作爲參數

  4. 最後,東西協調上述

012的3個行動

希望這有助於。

增加:退房由avdi格林書自信紅寶石。概述處理這種情況非常棒。

+0

謝謝!我同意,我已經有這本書,但還沒有讀過那麼多。我想出了爲什麼我這樣做,因爲我異步生成併發送收據,所以也許信用卡在排隊後立即改變,這可能是一個問題。 – Tosh