"view 가 자기를 렌더하려고 model 을 바꿔야 한다면, 문제는 view 가 아냐. model 이야."
강한 불변식
리팩터가 절대 조용히 깨면 안 되는 규칙이 있어: view 추가는 model 을 건드리지 않아. view 는 순수 projection 이야 — 모델을 읽고 그려. 필요한 기하(프렛, 건반, 비트 위치)는 모델의 기존 필드에서 끌어내고 아무것도 되쓰지 않아. 드럼 그리드는 비트 그리드를 깔려고 템포와 섹션을 읽지, 곡에 뭘 추가하지 않아.
변형 냄새
가끔 view 를 짓다가 렌더하려고 모델에 필드를 '추가해야' 하거나 노트를 손봐야 할 것 같을 때가 있어. 멈춰 — 그게 냄새고, 진단적이야. 둘 중 하나라는 뜻이야: 모델이 음악적 진실에 속하는 필드를 진짜로 빠뜨렸거나(그럼 모든 view 를 위해 의도적으로 모델에 추가해), 아니면 view 전용 상태를 공유 진실에 밀반입하려는 거야(하지 마 — view 에 둬). 절대 하면 안 되는 건 렌더러가 모델에 되써서 빈틈을 때우는 거야. 복사본과 발산이 정확히 그렇게 숨어들어.
view 엔 닫혀 있고, 새 view 엔 열려 있어
이건 음악 모자를 쓴 open-closed 아이디어야: 모델은 view 의 수정엔 닫혀 있지만, 시스템은 새 view 엔 열려 있어. bass 탭, 피아노 롤, 드럼 그리드를 영원히 더할 수 있고, 각 추가는 순수 가산이야 — 새 서브클래스, 진실 수정 0. view 추가가 모델 변경을 강제하는 날이 모델이 불완전했다는 걸 배우는 날이야. 유용한 정보지만, 그건 한 번 모두를 위해 내리는 모델 결정이지 — 절대 한 view 의 부작용이 아냐.