거대한 로직 클래스의 리팩토링을 시도했습니다.

어느 거대 로직 클래스를 안는 API를 리팩토링했다



전제: API 처리 개요


  • DB에서 데이터 A, B 가져 오기
  • 분류 a, b, c마다 처리가 다른 개소(로직①)가 있다
  • 분류 a, b, c는 API 매개 변수로 식별 할 수 있습니다
  • 데이터 AB의 값에 기초하여 계산 논리 ②, ③을 수행한다
  • 계산 결과를 DB에 등록

  • (실제는 루프 처리라든지 많이 있지만 할애)

    변경 전





    문제점


  • 주 처리가 플로우와 로직을 너무 꽉 찼습니다. 가독성도 최악
  • 전체의 흐름을 추구하려고 하면 API→메인 처리라고 해 메인 처리의 거대 소스를 위에서 아래까지 보지 않으면 안 된다
  • API와 메인 처리의 역할 분담이 조금 의미 불분명하다
  • 로직①은 메인 처리를 계승하고 있다. API의 최초로 분류 판정(abc의 클래스 취득)을 실시하고 있다

  • 해결책


  • 호출 계층을 낮추기
  • API와 메인 처리는 함께 로직 호출자를 하나로 만듭니다
  • 흐름은 API 클래스를 보는 것만으로 알 수 있습니다

  • 처리가 끝날 때마다 클래스화
  • 로직에 사용하는 데이터 취득이나 가공을 파라미터 작성 클래스로서 잘라내기


  • 변경 후





    좋아진 점


  • 흐름은 API 클래스를 보는 것만으로 알 수 있습니다
  • 처리 내용은 API 클래스가 호출하는 각 클래스를 보면 된다
  • 구현 내용은 각각의 로직 클래스를 보면 좋기 때문에 알기 쉽다

  • 애초에 어떻게 이런 일이 있었는지 (예상)


  • 원래 상당히 복잡한 계산 처리가 필요하고 복잡한 API였습니다
  • 추가 요구 사항이 발생했을 때 전체 최적을 생각하지 않고 그대로 메인 처리에 구현했다
  • 가동력이 길어진 결과 이런 경우가 많다. . .

  • 감상


  • 리팩토링 된 것 같지만 있어야하는 것을 찾기가 어렵습니다
  • 자신이 처음 보았을 때 곤란한 일, 이해하기 어려웠던 것을 힌트로 하면 좋다
  • 제 경우에는 어쨌든 흐름을 쫓는 것이 어려웠습니다

  • 더 잘 할 수 있지만 누군가 말해줘
  • 적어도 흐름이 보기 쉬워졌다고 생각한다. .

  • 참고 문헌(이번 참고로 한 것은 아니지만)



    리더블 코드 - 더 나은 코드를 작성하기위한 간단하고 실용적인 기술 (Theory in practice)
    h tp : // 아 mz 응. 아시아 / 3 7Ws0
    신규 버전 리팩토링 - 기존 코드를 안전하게 개선 - (OBJECT TECHNOLOGY SERIES)
    h tp : // 아 mz 응. 아시아/카 MqZdR

    시퀀스 다이어그램 정보



    boostnote로 걸렸습니다. 편리하네요!

    좋은 웹페이지 즐겨찾기