我正在使用Rails和Resque,但這更多的是關於實際的邏輯應該與後臺作業去哪裏的設計問題。在哪裏應該後臺作業邏輯去
我有這樣一個類:
class Ticket
# 1) should method go here?
end
和BG的工作是這樣的:
module Jobs
class PayTicket
# 2) or should the method go here?
end
end
然後有一個處理票務計費的方法。它使兩個網絡電話(其中之一將是緩慢的),所以很明顯,我們需要一個後臺作業
def pay_ticket
# calls out to stripe and another network call
end
1)如果我把邏輯#1以上,似乎是有意義的房子邏輯支付Ticket課程的門票。然後,我將實例化BG作業中的Ticket對象。這樣做的缺點是我不希望人們在背景作業之外調用pay_ticket方法,所以我需要添加一個說「只能用BG作業調用」的評論......這看起來很糟糕。
2)如果我把pay_ticket邏輯放在BG作業中,那麼我知道它只會在那裏被調用,但是它離開了那個感覺像應該去的類。
就像一些關於人們是否有胖背景工作或者邏輯通常停留在模型中的一般想法。或者,如果這取決於每種情況。謝謝!
我知道(或者我想我知道)什麼是「Ticket」,但「PayTicket」聽起來不像一個對象。也許你的問題從那裏開始。 – alexis 2014-10-10 18:52:01
@alexis它可能是一個TicketPaymentService。這聽起來像是一個對象嗎? – 2014-10-10 20:53:08
更好。那麼服務可以做些什麼?它可以支付票嗎?那麼支付方法就屬於這種情況,特別是如果你能想象它被廣義化了,並且它只依賴於Ticket的接口來獲得必要的信息。 – alexis 2014-10-10 23:35:54