본문 바로가기
C.W.K.
Stream
Lesson 05 of 05 · published

이 저장소가 실제로 사주는 것

~13 min · closing, trade-offs, judgment, architecture

Level 0흩어진 부품
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

장부, 양쪽 칸 다

사준 것들, 가치가 실제로 나타나는 순서대로.

  • 고침한테 집이 하나 생겨. 원래 논거고, 여전히 제일 작은 거야. 공용 층의 결함은 한 번 고쳐서 배달되지, 한 번 고치고 두 번 잊히지 않아.
  • 어긋남한테도 집이 생겨. 더 큰 거고. 첫 트랙의 앱 사이 버그는 아무한테도 안 속한 틈에 살았어. 주인이 있다는 건 그 틈한테 주소가 있다는 뜻이고, 주소가 있는 물건엔 테스트가 붙어.
  • 수렴이 결정을 수면으로 올려. 구현 셋을 통일하면 저자마다 기본값으로 답하고 있던 질문에 누가 답해야 해. 에러 자세, 어휘, 뭔가 없을 때 벌어지는 일.
  • 공용 층으로 수렴하는 앱이 공용 층을 개선해. 변환 넷 중 셋이 공용 컴포넌트를 바꿨고, 각각 그 저자들이 필요해본 적 없는 처방이었어.
  • 다음 형제가 싸. 새 앱이 자기 사본을 기르는 대신 태어날 때부터 배관을 갖다 써.

그리고 치르는 값, 똑같이 분명하게.

  • 공용 변경마다 붙는 배달 단계, 그리고 시스템이 아무도 설계 안 한 상태에 있는 창.
  • 사람이 잊을 수 있는 규칙, 그래서 어긋남 검사가 선택 사항이 아냐.
  • 프레임워크가 되려는 끊임없는 끌림, 태어날 때 적힌 규칙이랑 일부러 하는 확인으로만 버텨.
  • 공용 파일에 대한 조율. 공용 층에 대한 변경은 모든 소비자에 대한 변경이고, 누가 원했든 아니든 그건 참이야.

필요한지에 대한 정직한 시험

중복이 있는 코드베이스 대부분은 이걸 짓지 말아야 해. 시험은 "중복 코드가 있나"가 아냐. 다들 있어. 질문 셋에 가깝고, 결정하는 건 세 번째야.

  1. 중복된 층이 설계상 똑같아? 앱이 진짜로 달라서 사본이 다른 거면, 추출은 아무도 못 섬기는 인자 범벅 함수를 낳아.
  2. 어긋남이 이미 뭔가를 치르게 했어? "그럴 수 있다"가 아니라 그랬냐야. 앱 사이 결함, 누가 보고한 불일치, 셋 중 둘에만 적용된 고침.
  3. 사본들이 지금 따로 답하고 있는 질문들에 대해 모든 소비자가 공용 답을 받아들이겠어? 아니면 배관 문제가 있는 게 아냐. 서로 달라야 하는 앱들이 있는 거고, 정직한 구조는 따로 구현 더하기 그 사이 적힌 계약이야.
공용 코드는 중복을 없애고, 적힌 계약은 조율할 필요를 없애. 다른 기구고 대부분의 가족은 둘 다 필요해. 두 물건이 닮으면 공용 코드로 손 뻗는 게 반사고, 그래서 그렇게 많은 공용 층이 애초에 배관이 아니던 걸 쥐고 끝나. 어떤 땐 맞는 답이 구현 셋이랑 문서 하나야. 그건 통합 실패가 아니라 설계고.

들고 갈 문장

이 퀘스트의 전부가 수 하나로 줄어. 계속 반복해서 적용된 수. 그 물건한테 주인을 주고, 맞는 결과를 기본값으로 만들어.

배관이 주인을 얻었어. 어휘 둘 사이의 틈이 주인을 얻었어. 패널의 얼굴이 주인을 얻었고. 그리고 매번 실제로 버틴 강제는 누가 기억해야 하는 규칙이 아니라, 아무것도 안 넘기는 걸 맞게 만드는 기본값이거나, 테스트를 깨뜨리는 검사거나, 한 자리에서 만들어져 사방에 배달되는 값이었어.

문서에 사는 규칙은 맥락한테 져. 기본값이랑 깨지는 테스트에 사는 규칙은 안 지고. 이 퀘스트를 만들어낸 작업장이 지어진 바로 그 교훈이야. 반대 방향에서 도착한.

Code

그 결정, 실제로 돌릴 수 있는 점검표로·text
SHOULD YOU BUILD A SHARED-PLUMBING REPOSITORY?

1. IS THE DUPLICATED LAYER IDENTICAL BY DESIGN?
   [ ] the copies would have the same correct implementation
       regardless of what each app is about
   [ ] no copy encodes a product decision (a default, a limit, an
       ordering, a policy) that belongs to its app
   -> if no: extraction yields a parameter-riddled function that
      serves nobody. Stop.

2. HAS A DIVERGENCE ALREADY COST SOMETHING?
   [ ] a defect that appeared in several apps at once
   [ ] a fix applied in two places out of three
   [ ] an inconsistency somebody actually reported
   -> if no: you have a tidiness complaint, not a measurement. The
      inventory (track 1) is cheap; take it and wait.

3. WOULD EVERY CONSUMER ACCEPT A SHARED ANSWER TO THE QUESTIONS
   THE COPIES CURRENTLY ANSWER SEPARATELY?
   [ ] error posture      [ ] defaults
   [ ] vocabulary         [ ] what happens when something is missing
   -> if no: you do not have a plumbing problem. You have apps that
      NEED to disagree, and the honest structure is separate
      implementations plus a written contract between them.

IF YOU BUILD IT, THESE ARE NOT OPTIONAL:
   [ ] a drift check, run from EACH consumer's own suite
   [ ] a membership rule ('does it need to know what the app is
       about?'), checked and not merely believed
   [ ] a reversal condition for the distribution model
   [ ] a ledger of what is USED, separate from the manifest of what
       is deployed - with the reasons for every deliberate '—'

AND THE MOVE THE WHOLE QUEST REDUCES TO:
   give the thing an owner, and make the correct outcome the
   DEFAULT - not a rule somebody has to remember.

External links

Exercise

네 시스템의 제일 큰 중복에 대고 질문 셋짜리 점검표를 정직하게 돌리고, 답이 "이건 짓지 마"인 경우까지 포함해서 적어. 진행하기로 하면, 코드를 쓰기 전에 필수 항목 넷을 계획에 써 넣어. 특히 어긋남 검사랑 소비자마다 그걸 어디서 돌릴지.
Hint
질문 둘이 사람들이 건너뛰는 거고, 증거가 든 유일한 질문이야. 어긋남이 이미 물린 구체적인 값을 못 대겠으면 깔끔함을 근거로 이 일을 제안하는 거고, 그건 아무것도 아닌 건 아니지만 기능 작업한테 매번 질 거야. 그리고 져야 하고.

Progress

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

댓글 0

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

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