유지 관리 가능한 코드의 프로토타입

소개



이 게시물의 원동력은 프로덕션 소프트웨어 애플리케이션 작성에 대한 나의 접근 방식이 내가 체크인하려는 리포지토리 외부에 있는 일종의 샌드박스에서 코드를 작성하는 것임을 알게 되었기 때문입니다.

목표



내 목표는 먼저 내가 해야 할 작업을 수행할 수 있다는 것을 증명하고 코드 미학이나 코드 수정이 얼마나 쉬운지에 관계없이 올바른지 확인하는 것이었습니다. 주된 목적은 무언가를 작동시키는 것이었습니다. 그러나 항상 초기 코드 버전이 출시 가능한 최종 제품의 형태나 방식이 아니라는 태도가 있었습니다.

원기



blog post에서 논의한 문제를 해결하려고 했습니다. 나는 Python 내에서 어떻게 완전히 익숙하지 않았습니다.
  • 외부 프로세스를 시작하고 출력을 캡처해야 했습니다.
  • 출력을 캡처한 후 구문 분석해야 했습니다
  • .
  • 그리고 OS Xdiskutil unmount 명령으로 소비할 수 있는 것을 생성합니다.

  • 아이디어는 유틸리티가 문제가 있는 볼륨 세트(일명 성가신 타임머신 볼륨)를 마운트 해제한다는 것입니다.

    소스 코드 버전 1



    일반적인 방식으로 방금 지정한 요구 사항을 충족하는 다음 그림에 설명된 코드를 작성했습니다.



    이 글을 쓰면서 변수가 다음과 같다는 것을 알았습니다.
  • output
  • tmLines
  • timeMachineVolumes

  • 모두 문자열 목록이라고 선언했습니다. 버그를 소개하는 고전적인 방법인 버그에 대한 기회가 있다면.

    또한 나는 제한되지 않은 코드의 많은 양과 많은 양의 팬이 아닙니다. 제 생각에는 그것은 유지 불가능한 일입니다. 원래 코드는 리팩터링할 수 있다는 힌트를 제공합니다. 각 코드 블록 앞에 해당 기능을 설명하는 주석이 있기 때문에 이를 추론할 수 있습니다.

    더 나은 방법



    첫 번째 단계는 다양한 변환을 위한 특정 유형을 만드는 것이었습니다. 이것은 실제로 구문상의 설탕일 뿐이지만 리팩토링할 때 코드를 더 읽기 쉽고 오류가 덜 발생하도록 하는 역할을 합니다. 다음 그림은 변환을 보여줍니다.



    다음으로 코드를 클래스의 메서드로 재정렬해야 했습니다. 다음 그림은 원래 코드를 재정렬하여 향후 버전에서 더 쉽게 이해할 수 있도록 만드는 방법을 보여줍니다.



    이 리팩토링의 결과 세 가지 방법이 나왔습니다.

    • _runExternalMountCommand
    • _extractTimeMachineLines
    • _extractTimeMachineVolumes
    

    이 세 가지 메서드는 .execute 드라이버 메서드에서 순차적으로 호출됩니다.

    요약



    배워야 할 것은 먼저 코드가 올바르게 작동하도록 만드는 것입니다. 다음으로, 미래의 귀하 또는 원래 코드를 작성하지 않은 누군가가 언젠가는 이를 업데이트 및/또는 수정해야 한다는 점을 기억하십시오. 따라서 사람이 이해할 수 있도록 코드를 구성하십시오. 소스 코드의 기능에 대한 명확한 힌트를 남겨주세요. 영어로 읽고 자체 문서화되는 코드를 작성한다고 말할 수 있습니다. 어떤 사람들은 이것을 literate programming 이라고 부릅니다.

    원본 버전을 게시했습니다here.

    좋은 웹페이지 즐겨찾기