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Ç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_votesSə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
İ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 server2Şə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.
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
- 1Audit prompt-unu öz layihəndə işlət.
- 2Tapılan təkrarlardan birini seç və AI-dan onu tək sahibə endirmək üçün plan istə.
- 3Planı oxu, razı olmadığın ən az bir şeyi düzəlt, sonra tətbiq etdir.
- 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
- react.dev — Learn React · React team · «Choosing the State Structure» — təkrarlanan state
- Designing Data-Intensive Applications (2nd edition) · Martin Kleppmann, Chris Riccomini, 2026 · Törəmə məlumat (derived data)