저는 레일즈와 리스터를 사용하고 있습니다. 그러나 이것은 실제 로직이 백그라운드 작업과 함께 있어야하는 위치에 대한 디자인 질문에 가깝습니다.백그라운드 작업 로직은 어디로 가야합니까?
class Ticket
# 1) should method go here?
end
이 같은 BG 작업 :
module Jobs
class PayTicket
# 2) or should the method go here?
end
end
그런 다음 티켓에 대한 청구를 처리하는 방법이 있어요
는이 같은 클래스를 가지고있다. 그것은 두 개의 네트워크 호출을 (그 중 하나가 느려질 수)하게, 그래서 # 1의 논리를 넣을 경우이 논리 것을 집에 이해하는 것 이상은) 우리가 백그라운드 작업
def pay_ticket
# calls out to stripe and another network call
end
1을 필요로 분명 Ticket 클래스로 티켓을 지불하십시오. 그런 다음 BG 작업에서 Ticket 객체를 인스턴스화합니다. 이것의 단점은 사람들이 백그라운드 작업 이외의 방법으로 pay_ticket 메서드를 호출하는 것을 원하지 않는다는 것입니다. 따라서 "BG 작업만으로 호출"등의 주석을 추가해야합니다. 이것은 나쁜 형식처럼 보입니다.
2) 내가 BG 작업에 pay_ticket 논리를 넣으면 그곳에서만 호출된다는 것을 알지만, 그렇다면 느낀 곳에서 이되어야합니다.이되어야합니다.
사람들이 뚱뚱한 배경 작업을 갖고 있거나 로직이 일반적으로 모델에 남아있는 경우에 대한 일반적인 생각이 맘에 드는 것일까 요? 또는 각 상황에 따라 달라지는 경우. 감사!
나는 '티켓'이 무엇인지 알고 있지만, 'PayTicket'은 객체처럼 들리지 않습니다. 어쩌면 당신의 문제가 시작될 수도 있습니다. – alexis
@alexis TicketPaymentService가 될 수 있습니다. 그게 지금 사물처럼 들리는가? –
그렇다면 서비스는 어떤 일을 할 수 있습니까? 티켓을 낼 수 있습니까? 그런 다음 지불 방법이 거기에 속합니다. 특히 그것이 일반화되었다고 상상할 수 있다면, 필요한 정보를 얻기 위해'티켓 '인터페이스에만 의존합니다. – alexis