"view가 자기를 그리려고 model을 바꿔야 한다면, 문제는 view가 아니라 model에 있어."
강한 불변식
리팩터가 조용히 깨뜨리면 안 되는 규칙이 있어. view를 추가해도 model은 바뀌지 않아야 해. view는 모델을 읽고 그리는 순수한 투영이야. 프렛, 건반, 비트 위치 같은 기하는 모델에 이미 있는 값에서 계산하고 아무것도 되쓰지 않아. 드럼 그리드는 비트 그리드를 만들기 위해 템포와 섹션을 읽지만 곡에 새 사실을 밀어 넣지는 않아.
변형 냄새
새 view를 만들다 보면 렌더링에 필요한 필드를 모델에 추가하거나 노트를 조금 손봐야 할 것처럼 느껴질 때가 있어. 그때 멈춰. 아주 반가운 냄새야. 둘 중 하나거든. 모델이 음악적 진실에 정말 속하는 정보를 빠뜨렸거나, view만의 상태를 공유 진실에 밀반입하려는 거야. 첫 번째라면 모든 view를 위해 모델을 의도적으로 확장해야 하고, 두 번째라면 그 상태를 view 안에 남겨야 해. 렌더러가 모델에 되써서 빈틈을 가리게 두면 안 돼. 복사본과 갈라짐은 바로 그 틈으로 숨어들어.
view에는 닫혀 있고, 새 view에는 열려 있어
음악 모자를 쓴 open-closed 원칙이야. 모델은 각 view의 편의를 위한 수정에는 닫혀 있고, 시스템은 새로운 view를 추가하는 일에는 열려 있어. bass 탭이든 피아노 롤이든 드럼 그리드든 계속 더해도 하나하나는 순수하게 더해지는 것뿐이야. 새 자식 클래스는 생기지만 진실은 한 줄도 안 고쳐. view를 더하는데 모델을 바꿔야 한다면, 모델에 정말 빈틈이 있었는지 알아볼 기회는 돼. 다만 그 결정은 한 view의 부작용이 아니라 모든 소비자를 위한 모델 결정으로 내려야 해.