"여행을 한 번 바꾸면, 모든 view 가 다시 그려져. 그건 UI 트릭이 아냐 — 아키텍처 전부야."
아래에 있는 model
Waystone 의 모든 화면 아래엔 단 하나의 canonical 여행 state 가 있어. 그 aggregate root 는 Journey — lifecycle, 여행자, 목적지 범위, 날짜, 현재 plan revision, departure baseline, consultation 스레드로의 링크를 소유해. 거기 매달린 게 날들, 장소와 그 journey-scope 의미들, route 들, 추천들, 결정들, 그리고 무슨 일이 있었는지의 기록. 그 구조화된 state 가 model 이야. 네가 볼 수 있는 모든 것 — itinerary, globe, journey map, 일일 로그 — 은 그것의 view 야.
이건 배관이 아니라 다형성이야
OO Quest 를 했으면 익숙할 거야. 아빠가 어디서나 보는 그 아이디어니까: 하나의 model, 여러 다형적 view. itinerary 는 날들과 그 순서를 읽어. 지도는 장소와 route 를 읽어. globe 는 어느 journey 가 세상 어느 부분을 건드렸는지 읽어. 로그는 day entry 를 읽어. 각 view 는 같은 canonical state 에 다른 질문을 하고 답을 자기 방식으로 렌더해 — 그리고 결정적으로, 어떤 view 도 model 을 편집하지 않아. view 는 reader 야. model 이 바뀌면, 걔들 전부가 새 진실에서 다시 그려. 그중 누구도 out-of-sync 될 사본을 쥐고 있지 않았으니까.
왜 이게 정직한 설계인가
대안 — 각 화면이 여행 사본을 자체 보관하게 두는 것 — 은 불일치로 가는 길이야. 지도가 이걸 말하고, itinerary 가 저걸 말하고, 이제 둘 다 진짜라 주장하는 여행이 두 개야. 모든 표면을 하나의 model 의 projection 으로 만들어서, Waystone 는 여행이 언제나 하나뿐임을 보장해. 그 보장의 비용은 규율이야: view 가 '그냥 편의로' 뭔가 조용히 저장하게 두려는 유혹에 저항해야 해. 모든 개인 은닉처가 미래의 divergence 야. 지도가 아무것도 저장 안 하는 건 한계가 아냐 — 지도가 언제나 진실을 말한다는 약속이야.