C.W.K.
Stream
Lesson 01 of 05 · published

하나의 canonical state

~12 min · polymorphism, model, aggregate, oop

Level 0표식 없는 길
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"여행을 한 번 바꾸면, 모든 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 야. 지도가 아무것도 저장 안 하는 건 한계가 아냐 — 지도가 언제나 진실을 말한다는 약속이야.

Code

하나의 model, 여러 reader (형태 스케치)·text
Journey (canonical model)
  lifecycle, 여행자, 날짜, plan_revision, baseline
  |- days[]        (local-calendar 컨테이너)
  |- places[]      (+ journey-scope Waystone 의미)
  |- routes[]      (planned + actual geometry)
  |- decisions[]   (아빠가 뭘 골랐고, 왜)
  '- events[]      (날 안의 현실 단위)

     ^        ^        ^        ^
 itinerary  globe     map      log        <- view
 days       journeys  places   entries
 읽음       읽음      읽음     읽음

# 모든 view 가 model 을 읽어. 어떤 view 도 편집 안 해.
# model 을 한 번 바꾸면; 모든 view 가 새 진실에서 다시 그려.

External links

Exercise

같은 데이터를 두 가지 이상으로 보여주는 앱을 봐 — 월/주/일 view 캘린더, board/list/timeline 프로젝트 도구. 물어: 모든 view 가 읽는 하나의 model 이 아래 있어, 아니면 각 view 가 drift 할 수 있는 자기 state 를 유지해? 같은 데이터의 두 view 가 안 맞았던 순간을 찾아봐. 그 불일치가 개인 사본이 새는 거야.
Hint
깔끔한 테스트: 한 view 에서 편집한 게 즉시 정확히 다른 모든 view 를 갱신하면, 아래 하나의 model 이 있어. 두 번째 view 를 'refresh' 하거나 'sync' 해야 한 적 있으면, 그건 자기 사본을 쥐고 있던 거고 — 사본은 drift 해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.