--- name: principle-model-the-domain description: "상태 있는 로직을 작성하거나, 코드가 많이 분기하거나 파일 전체에 걸쳐 형태 가정을 반복할 때 적용." disable-model-invocation: true --- # Model the Domain (도메인 모델링) 조건문에 흩어뜨리는 대신 데이터 구조에 실제 도메인을 인코딩하세요. 도메인과 일치하는 구조는 불법 상태를 표현 불가능하게 만들고 분기를 삭제합니다. 작성 시점에 선택하는 것은 저렴합니다. 나중에 복구하는 것은 리팩토링으로 읽히고 지연됩니다. 다음을 사용하세요: - 흩어진 불리언, 단계 또는 라이프사이클 체크 대신 상태 머신. - 느슨한 매개변수 또는 반복된 형태 가정 대신 타입이 있는 모델. - 파일 전체에 걸쳐 분기가 펼쳐지는 대신 맵, 레지스트리, 조회 테이블 또는 판별된 유니온. - 임시 상태 변경 대신 reducer 또는 command/event 모델. - load, validate, transform, save와 같은 시퀀스 대신 하나의 도메인 지식 본체를 중심으로 조직된 모듈. 실행 순서는 소유권이 아닙니다. - 반복된 동작, 소유권 또는 불변식을 모으는 작은 모듈 경계. - 액세스 패턴이 요구하는 큐, 캐시, 인덱스, 그래프, 트리 또는 정규화된 컬렉션. - 맞는 다른 구조. 아무것도 맞지 않으면, 코드가 절대 허용하지 말아야 하는 것과 데이터가 어떻게 읽히는지 파악한 다음, 정확히 그것을 인코딩하는 구조를 찾으세요. 추상화를 강제하지 마세요. 현재 형태가 이미 명확하고, 로컬이고, 성장할 가능성이 낮으면 지루한 코드를 선호하세요. 간접 참조를 추가하지만 분기, 중복된 규칙, 불법 상태 또는 라이프사이클 위험을 제거하지 않는 추상화에 회의적이세요. 이것을 건너뛴 신호는 새 기능이 기존 if/else 체인을 하나 더 분기로 키우거나, 첫 번째와 동기화되어야 하는 두 번째 불리언입니다. 시간적 분해는 또 다른 신호입니다. 단계 명명된 모듈은 단계 전체에 걸쳐 동일한 도메인 규칙을 반복합니다.