조기 반품 패턴을 사용하는 이유는 무엇입니까?


Thanks to Sarah Kilian @rojekilian for making this photo available freely on Unsplash 🎁

처음에는 초기 수익을 사용하는 것을 좋아하지 않았지만 시간이 흐르고 팀원들과 짝을 이루면서 이 간단한 패턴이 얼마나 강력한지 이해했다고 말하면서 이 기사를 시작하고 싶습니다.

나는 프로그래머로서 첫해에 나쁜 습관을 배웠고 새로운 습관을 개발하는 것은 괜찮습니다. 일상 생활에서 예를 들어 보겠습니다.

간단한 코드가 얼마나 빨리 모든 것을 망칠 수 있습니까?



async function getDeliveryType(prod: Product, user: Client) {
  if (prod.isValid()) {
    if (user.isValid()) {
      const address = await getClientAddress(user.id);
      if (address) {
        const fee = await calculateFee(user, address);
        if (fee > 0) {
          return 'delivery';
        } else {
          return 'online';
        }
      } else {
        throw new Error();
      }
    } else {
      throw new Error();
    }
  } else {
    throw new Error();
  }
}

위의 코드는 배송 유형을 파악하기 위한 간단한 아이디어였으며 코드를 엉망으로 만들지 않고 조기 반품을 적용하는 힘을 이해하는 데 도움이 되는 완벽한 예입니다.

코드에서 무엇을 관찰할 수 있습니까?
  • 코드가 선형적이지 않습니다. 더 많은 유효성 검사를 추가하면 모든 조건을 이해하기 어려울 것입니다.
  • 긍정적인 응답을 보려면 if를 탐색해야 합니다.
  • if-else에 의해 생성된 구조체 때문에 읽기가 혼란스럽습니다.
  • 게다가 Else is considered smellyArrow anti-pattern 두 가지 안티패턴이 있습니다.

  • 조기 귀국이란 무엇입니까?



    함수와 메서드의 가독성을 유지하기 위한 접근 방식입니다.

    😂 네, 대답은 매우 간단합니다.

    함수나 메서드를 작성할 때 조기 반환이란 기대한 긍정적인 결과가 함수의 끝에 반환되는 것을 의미하며 조건이 충족되지 않으면 나머지 코드는 예외를 반환하거나 throw하여 실행을 종료합니다.

    function sayMyName(name: string): string {
     if (!name || name.length < 0) {
        return;
      }
      return `Hello, ${name}`
    }
    


    초기 반환 패턴을 사용하도록 코드 리팩터링



    내가 말했듯이 너무 많은 if-else는 코드를 따라가기 어렵게 만들 수 있습니다. 들여쓰기가 "이 코드의 기능"을 이해하는 데 집중하는 데 도움이 되기 때문에 이 접근 방식이 마음에 듭니다. "여기서 무슨 일이 일어나고 있습니까?"

    예제 코드를 리팩토링해 봅시다.

    async function getDeliveryType(prod: Product, user: Client) {
      if (!prod.isValid()) {
        throw new Error();
      }
    
      if (!user.isValid()) {
        throw new Error();
      }
    
      const address = await getClientAddress(user.id);
    
      if (!address) {
        throw new Error();
      }
    
      const fee = await calculateFee(user, address);
      if (fee > 0) {
        return "delivery";
      }
      return "online";
    }
    


    지금 우리는 무엇을 관찰할 수 있습니까?


  • 코드에 들여쓰기 수준이 하나 있습니다.
  • 쉽고 빠르게 코드를 읽을 수 있습니다.
  • 양수 결과는 함수 끝에 유지됩니다.
  • 논리/비즈니스 오류를 먼저 찾을 수 있으며 로그 용어에서 실수와 버그를 방지하는 데 도움이 됩니다.
  • 이제 실패하지 않는 디자인 패턴이 생겼습니다 🙂.
  • 오류 발생 시 함수가 즉시 종료됩니다.
  • 이러한 마음가짐으로 다음과 같은 디자인 패턴 목록을 구현합니다. Fail Fast , Guard Clause , Bouncer Pattern .

  • 결론



    스타일 가이드라인으로 채택하는 것을 추천하지만, 이는 주관적인 것이므로 사용 여부는 귀하의 결정입니다.

    좋은 웹페이지 즐겨찾기