RƏSƏDXANA

Həftə 6 · 12/23

Tək həqiqət mənbəyi

6 dəqiqəlik oxu

Evdə iki saat var və fərqli vaxt göstərir. Hansına inanırsan? Problem saatların yanlış olması deyil — problem iki saatın olmasıdır.

Hər faktın bir sahibi olmalıdır. İkinci nüsxə bir gün fərqlənəcək və bu fərq xəta kimi görünməyəcək — sadəcə nəsə «işləməyəcək».

// two clocks
localStorage.setItem("app-auth", JSON.stringify({ token }));   // written here
const t = localStorage.getItem("session-token");               // read there
İki sətir, iki fərqli açar. Kod xəta vermir; sadəcə token heç vaxt tapılmır.

Çox deyilən söz: Bir dəyər iki yerdə lazımdırsa, kopyala. Sonra sinxronlaşdırarsan.

Hər faktın bir sahibi olur, qalan hər şey ondan törəyir. İki nüsxə razılaşmamaq üçün iki şansdır. Razılaşmazlıq da xəta kimi görünmür: sadəcə bir funksiya səssizcə işləmir.

Saxlama, törət

Say, «sahibdirmi», cəm kimi dəyərlər mənbədən hesablanmalıdır. Ayrıca saxlanılan say mənbədən ayrılır — ən pisi səssizcə.

AI belə yazır

UPDATE posts SET votes = votes + 1 WHERE id = ?;   -- beside post_votes

Sən bunu istə

UPDATE posts
   SET votes = (SELECT COUNT(*) FROM post_votes WHERE post_id = ?)
 WHERE id = ?;

Hər açarın bir sahib modulu

localStorage açarları, cookie adları, event adları bir qeydiyyatda olmalıdır. İki faylda bir az fərqli yazılan açar xəta vermir — sadəcə heç nə tapmır.

Sən bunu istə

export const KEYS = {
  session: "app-session",
  lessonsDone: "app-lessons-done",
} as const;

Ölü kodu kor-koranə qoşma, sil

Heç kimin çağırmadığı funksiya heç kimin yoxlamadığı iddiadır. Onu qoşmazdan əvvəl soruş: hələ də lazımdır, yoxsa iş artıq başqa yerdə görülür?

Diff oxuyanda soruş: Yeni bir dəyər əlavə olunanda soruş: bunun sahibi kimdir və başqa harada saxlanılır?

Terminlər

single source of truth
Bir faktın tək nüfuzlu yeri; digər hər şey ondan oxuyur.
derived state
Saxlanılmayan, lazım olanda başqa məlumatdan hesablanan dəyər.
cache invalidation
Köhnəlmiş nüsxəni nə vaxt atmaq lazım olduğuna qərar vermək.
dead code
Yazılmış, amma heç vaxt işə düşməyən kod — üstəlik oxuyanı aldadır.
stale comment
Kodun artıq etmədiyi (və ya heç vaxt etmədiyi) bir şeyi təsvir edən şərh.

İndi sən yoxla

1Bu kod nə edir?

const me = useProfile().localId;             // random id made on this device
{post.authorId === me && <DeleteButton />}   // authorId = account id from the server

2Şərh deyir: «bu id girişdən sonra server id-si ilə əvəz olunur». İlk nə edirsən?

Hazır prompt

İngiliscədir, çünki terminlər ingiliscədir. Tərcümə etsən də terminləri saxla.

prompt
Audit this codebase for duplicated sources of truth.

For each of: auth token, user id, user profile, permissions,
server data cached on the client:
- list every place it is stored or computed (file:line)
- say which one is authoritative
- flag any function that is defined but never called
- flag any comment that describes behaviour the code does not perform

Report only; do not change code.

Öz kodunda

  1. 1Audit prompt-unu öz layihəndə işlət.
  2. 2Tapılan təkrarlardan birini seç və AI-dan onu tək sahibə endirmək üçün plan istə.
  3. 3Planı oxu, razı olmadığın ən az bir şeyi düzəlt, sonra tətbiq etdir.
  4. 4Funksiyanı real tətbiqdə yoxla — təkcə build-in keçməsi kifayət deyil.

Bunu görəndə bitib: Təkrarlanan dəyər bir yerdə yaşayır, qalanları ondan törəyir və funksiyanın hələ də işlədiyini real tətbiqdə görmüsən.

Daha dərinə

Oxumaq üçün