여기서 올바른 패턴은 상황에 따라 다릅니다. 고집 할 특정 패턴을 선택하기 전에 그 질문에 대한 답을 찾으려고 노력할 것입니다.
- 런타임에 (1,2,3) 검사의 다른 조합을 작성해야합니까?
- 동작을 수행하기 위해 동일한 변수가 필요합니까 아니면 크게 다른가요?
- 오류 메시지는 얼마나 정확해야합니까?
- 실패한 경우 사용자는 항상 (1) 단계부터 다시 시도합니까?
- 동시성은 어떻게 처리됩니까?
- 각 메소드는 요청에 무언가를 추가하거나 단순히 유효성을 검사합니까? (예 : 기본 계정 ID?)
직감에 따라 오류 코드에 대한 매개 변수를 집계하여 일반 방법으로 코딩합니다.
public void DoTransaction(IErrorAgregator error, TransactionRequest request)
{
if(!IsTransactionInCertainTimePeriod(request, error)) return;
if(!IsTransactionAmountInUserBounds(request, error)) return;
if(!UserHaveDefaultAccount(request, error)) return;
bankingTransactor.PerformTransaction(request);
}
DoTransaction을 "ITransactionValidationStragegy"인터페이스에 넣고 유효성 검증 상용구 코드를 포함하는 계층 수퍼 유형을 작성하는 것이 좋습니다.
그러나이 디자인에서는 유효성 검사 논리가 컴파일 타임에 결정된다고 가정합니다.