코드가 표현하지 못하는 구분은 없는 것으로 취급된다
상태·값·권한·소유권을 설계할 때는, 그 구분을 코드(타입·스키마·도구 설정)가 표현하게 만든다.
이럴 때
상태를 하나 늘릴 때. 없는 값을 0·빈 문자열·기본값으로 채우고 싶을 때. 라우터나 API 에 등록하면서 "화면에서 안 부르니까 괜찮다"고 생각할 때. 남이 소유한 테이블을 다룰 때.
이렇게
- 상태 × (무엇이 보이나 · 어디로 갈 수 있나 · 어떻게 빠져나오나) 표를 그린다.
- "재지 못함(NULL)"과 "쟀는데 0"을 가른다.
- 로딩·빈 값·실패를 서로 다른 모양으로 보여 준다.
- 경계는 도구에게 알린다. 그 층에서 표현이 안 되면 다른 층으로 옮긴다.
멈출 신호·예외
판정에 쓰이지 않는 구분까지 표현하면 모델만 부푼다.
설명
사람이 알아서 구분하겠지 하고 넘긴 구분은 곧 없는 것이 된다. 화면에서 부르지 않는 프로시저도 등록된 순간 공개 API 였다. "값 없음"을 뜻하던 신호가 코드에서 실패와 같은 모양이었을 때 멀쩡한 데이터가 버려졌다. 재지 못한 지표를 0 으로 채우자 정렬 첫 페이지가 "가장 낮은 값"이 아니라 "측정 실패"로 채워졌다.
도구에게도 사람의 의도는 보이지 않는다. 경계를 한 줄로 알려 주지 않으면 마이그레이션 도구는 남의 테이블을 제 것으로 알고, 파생 상태를 한 방향으로만 갱신하면 그건 파생이 아니라 곧 어긋날 복사본이다.
반례
모든 구분을 표현하려 들면 역할과 단계가 계속 늘어난다. 조건문에 한 번도 쓰이지 않는 구분은 표시만 하고 모델에 넣지 않아도 된다.
판별법
"이 구분이 판정에 쓰이는가, 그리고 코드가 그걸 말할 수 있는가?"
이 상태에서 나갈 길이 있나, 이 파생을 원본에서 다시 계산해도 같은 값이 나오나, 이 값은 "없음"인가 "0"인가, 이 경계를 도구가 아나. 하나라도 막히면 그 구분이 빠져 있다.