2017-12-07 1 views
-3

아래 코드에서 월간 날짜 (mtd) 표시기가 true인지 또는 이전 2 영업일 (btd)이 지난 경우에 따라 비즈니스 날짜가 결정되어야합니다. 표시기가 참입니다.if/else 문을 패턴으로 대체하십시오.

현재 다른 표시기가 있으면 if else 문을 추가해야합니다.

이 코드를 더 쉽게 유지할 수있는 방법은 팩토리 디자인 패턴을 사용하는 것입니다. 그러나 패턴을 구현하기 위해 취해야 할 단계는 무엇인지 모르겠습니다.

public static string GetBusDate(bool mtdIndicator, bool prev2BusDtInd) 
    { 
     string busDate = Helper.PreviousBusinessDate; 

     if (mtdIndicator) 
     { 
      busDate = Helper.FOMBusDt; 
     } 
     else if (prev2BusDtInd) 
     { 
      busDate = Helper.Previous2BusinessDate; 
     } 

     return busDate; 
    } 
+3

패턴을 구현하기 위해 취해야 할 단계가 무엇인지 잘 모르겠다 ._ 우선 공장 패턴이 무엇인지에 대해 적절한 조사를하십시오. –

+4

이 시점에서 중첩 된 조건부 연산자를 사용하고 싶습니다. 특정 디자인 패턴에 대한 필요성을 확신하지 못합니다. 그리고 팩토리 패턴은 관련성이없는 것처럼 보입니다. –

+2

형식이 개체 수명 동안 변경되지 않으면 팩터 리 패턴이 작동합니다.그럴 수있는 경우 [전략 패턴] (https://en.wikipedia.org/wiki/Strategy_pattern)을 사용하십시오. 그러나이 간단한 경우,'if' /'else if' 체인을 고수 할 것입니다. –

답변

2

팩토리 패턴 (공장 방법 & & 추상 공장)이 패턴은 몇 가지를 만들 수 강제하기 때문에, 사용 사례에 대해 잘 작동하지 않을 : 여기

코드입니다 각 if 문과 패턴에 대한 클래스는 대개 추상 문자열을 반환하기 때문에 클라이언트 코드에 추상 객체를 반환합니다.

또한 단순한 조건부 논리를 단일 클래스로 이동하기 때문에 디자인 패턴이 아닌 단순 팩토리를 사용할 수 없으므로 코드 디자인이 향상되지 않습니다.

이 아니야 디자인 패턴을 사용하면 유연성의 이점없이 코드의 복잡성이 높아집니다.

한 가지 코드 줄을 사용하여 if/else 문으로 남겨두기 만하면됩니다.

return mtdIndicator ? Helper.FOMBusDt : 
     prev2BusDtInd ? Helper.Previous2BusinessDate : 
         Helper.PreviousBusinessDate; 

당신이 다형성과 조건문을 바꾸려면 당신이 시도해야합니다

  • 체인의 책임 패턴
  • 전략 패턴
  • 데코레이터 패턴

... 또는 기타 패턴 (전체 아키텍처에 따라 다름)

또한 'Tell Do not Ask'를 따라 ifs를 피할 수 있습니다.

당신은 작업 X를 수행하기 위해 낮은 수준의 구성 요소에 요청을 보내야합니다
    • 은 내부 상황/상태입니다에 대해 당신은 낮은 수준의 구성 요소를 요구해서는 안됩니다 (당신이 할 그 isStateXOk():Boolean 같은 피 기능에 의해)

    팁 : 3 ~ 10 개 이상의 클래스를 작성하여 을 작성하여 간단한 if/else 문을 피하지 마십시오. 각 사례 분기마다 클래스를 만들어 스위치를으로하지 마십시오.