워크업 사용 가능한 코드베이스

"Walk-up usable"(Walk-up-and-use라고도 함)이라는 용어는 새로운 사용자가 즉시 효과를 발휘할 수 있는 매우 직관적인 시스템을 설명합니다.

걸어서 올라갈 수 있는 놀라운 것의 예는 엘리베이터입니다. 숫자가 적힌 많은 버튼을 볼 수 있으며 그 기능이 매우 분명합니다.



당신은 아마 엘리베이터 사용법을 배우지 않았을 것입니다. 스펙트럼의 다른 쪽 끝에서 비행기 조종석에 떨어졌다면 미리 많은 훈련을 받았으면 하고 바랄 것입니다.



개발자 경험에 대해 생각할 때 코드베이스의 워크업 사용성에 대해 생각합니다. 새로운 개발자가 효과를 발휘하는 데 얼마나 걸립니까? 존재하는 추상화가 직관적입니까? 대규모 레거시 코드베이스를 사용해 본 적이 있다면 아마도 비행기 조종석에 떨어졌고 비행기를 타라는 요청을 받은 다음 엘리베이터를 타고 3층으로 가라는 요청을 받는 것과 훨씬 더 비슷한 느낌을 받았을 것입니다.

라이브러리 또는 외부용 API를 만드는 회사의 경우 동일한 원칙이 적용됩니다. 제대로 문서화되지 않고 혼란스러운 API는 잠재 고객을 경쟁업체로 보내는 좋은 방법입니다.

그렇다면 우리는 워크업 사용성을 어떻게 디자인할 수 있을까요? 쓰는 방법clean code이나 올바른 사용법design patterns에 대한 훌륭한 책은 확실히 많이 있습니다. 그리고 회사 수준에서 엔지니어가 시간이 지남에 따라 축적되는 기술 부채를 해결할 시간을 갖도록 할 수 있습니다.

저에게 가장 중요한 원칙 중 하나는 다음과 같습니다.

미래의 개발자가 실수하는 것을 어렵거나 불가능하게 만드십시오.

최고의 개발자라도 자신이 저지른 실수로 인해 제약을 받습니다.

적절한 테스트가 있으면 문제를 신속하게 파악하고 해결하는 데 도움이 될 수 있지만 인터페이스 디자인으로 실수를 사전에 방지할 수 있는 Typescript의 예를 살펴보겠습니다. API 응답에 대한 유형을 생성한다고 가정해 보겠습니다.

interface ApiResponse<T> {
    loading: boolean,
    data?: T,
    error?: string,
}


괜찮은 것 같지만 질문은 "누군가 실수로 이것을 어떻게 오용할 수 있습니까?"입니다. 글쎄, 그들은 로딩이나 오류가 있는지 확인하는 것을 잊을 수 있습니다. 이를 방지하기 위해 다음과 같은 공용체 유형을 사용하도록 이 클래스를 다시 작성할 수 있습니다.

enum ApiResponseStatus {
    Loading,
    Success,
    Error,
}

interface StillLoadingApiResponse {
    status: ApiResponseStatus.Loading,
}

interface SuccessfulApiResponse<T> {
    status: ApiResponseStatus.Success,
    data: T,
}

interface ErrorApiResponse {
    status: ApiResponseStatus.Error,
    error: string,
}

type ApiResponse<T> = StillLoadingApiResponse | SuccessfulApiResponse<T> | ErrorApiResponse;


이것은 우리가 실수하지 않도록 어떻게 방지합니까? 첫 번째 예를 취하고 ApiResponse에서 자동 완성을 사용하면 다음과 같이 표시됩니다.



두 번째 예와 대조할 수 있습니다.



첫 번째 예에서는 로드가 완료되기 전에 데이터를 자유롭게 사용할 수 있습니다. 그러나 두 번째 예에서 처음에 볼 수 있는 유일한 것은 상태입니다. 상태는 세 가지 유형에서 공유되는 유일한 속성이기 때문입니다. 상태를 확인해야 할 뿐만 아니라 상태를 먼저 확인하지 않고 데이터에 액세스하려고 하면 오류가 발생합니다.



이러한 변화를 통해 우리는 미래의 개발자(또는 미래의 자신)가 올바른 방향으로 나아가도록 능동적으로 유도했습니다. 이와 동일한 사고 스타일을 코드베이스 또는 빌드하는 외부 API에 적용하면 코드에 의존하는 사람들이 게이트 밖에서 더 효율적일 수 있는지 확인할 수 있습니다.

코드베이스를 더 유용하게 만들기 위해 어떤 접근 방식을 취했습니까?

좋은 웹페이지 즐겨찾기