Google은 여러 가지 방법으로 고객에게 청구서를 발행하는 인보이스 모델을 보유하고 있습니다. 간결함을 기하기 위해 인상 당 비용 및 전화 당 비용 조회에 대해 중점적으로 다룰 것입니다. 내 생각은 이들 (및 나머지) 전략을 구현 한 다음 인보이스 클래스에 동적으로 혼합하는 것이 었습니다.계산에 다른 데이터를 사용하는 청구 모델의 전략 패턴?
노출 수/통화 수를 결정하는 데 사용되는 다양한 정보 소스가 있기 때문에 적절합니다. Invoice
클래스의 기본 수식을 유지하면서 전략에 캡슐화 할 수 있습니다.
인상 당 비용 계산은 간단합니다 : num impressions X cost per impression
.
전화 문의 계산은 좀 더 복잡합니다 : num calls X cost per call
.
class Invoice
def self.strategy
self.class_eval <<-EOS
include #{billing_type}
EOS
end
def invoice_amount
# this will used the module mixed in above
self.rate * calculate_impressions
end
end
그런 다음 모듈이 될 수있다 : 그러나
module PerImpressionCalculation
def calculate_impressions
# get the number of impessions from source a...
end
end
module PerInquiryCalcuation
def calculate_impressions
# get the number of impessions from source b...
end
end
, 호출의 길이를 기준으로하고이 모델에 따라 변화하는 통화 횟수 여부. 따라서 전화 로그를 검색 할 때이 값을 가져야합니다.
제 질문은이 값을 어디에 저장합니까? 10 초 통화를 기반으로 한 인보이스 및 30 초 통화를 기반으로하는 인보이스에 대한 전략을 세울 수 있지만 낭비입니다. 임계 값이 15 초가 되길 원하는 거래가 나오면 새로운 전략을 작성해야합니다. 이 문제를 해결하기위한 최상의 설계 선택은 무엇입니까?