Types and Content Boundaries
Menempatkan type dan static content dekat owner agar setiap import menjelaskan alasan file itu dipakai.
Tujuan belajar
- Membedakan feature type dari type lintas domain yang benar-benar shared
- Menempatkan static content di dekat feature atau track yang memilikinya
- Menghindari folder global yang menjadi tempat semua type dan constants
- Menyusun public import yang tidak membocorkan detail internal tanpa alasan
Isi lesson
5 blok- 1.Type dan content juga memiliki ownerBelum selesaiWajib
- 2.Course filter type dan copy dimiliki feature coursesBelum selesaiWajib
- 3.Coding practiceBelum selesaiWajib
- 4.Cek pemahamanBelum selesaiWajib
- 5.RingkasanBelum selesaiWajib
Type dan content juga memiliki owner
WajibFolder types atau constants global mudah menjadi tempat pembuangan: CourseFilterState, ProfileFormValues, API mapper, warna feature, dan copy onboarding akhirnya hidup berdampingan tanpa hubungan. Mulai dari owner terdekat. Type yang hanya menjelaskan feature courses dapat tinggal di features/courses/types.ts. Static course copy dapat berada di features/courses/content.ts bila tidak dipakai oleh curriculum engine lain. Baru pindahkan ke shared ketika beberapa feature menggunakan contract yang sama dan owner-nya memang lintas feature. Boundary ini membuat import memberi context: ketika membaca type, engineer tahu product area yang bertanggung jawab atas perubahan berikutnya.
Bagian ini memengaruhi progres lesson.
Course filter type dan copy dimiliki feature courses
Wajib// src/features/courses/types.ts
export type CourseFilter = {
level: "beginner" | "intermediate" | "advanced";
query: string;
};
// src/features/courses/content.ts
export const courseEmptyCopy = {
title: "Belum ada course yang sesuai",
description: "Ubah filter atau coba kata kunci lain.",
};
// src/features/courses/components/CourseEmptyState.tsx
import { courseEmptyCopy } from "../content";
import type { CourseFilter } from "../types";CourseFilter dan courseEmptyCopy ditempatkan bersama feature karena istilah serta perubahan mereka mengikuti product courses. Type AppUser atau component Button tidak dipindahkan ke sini bila beberapa feature memang memakai contract yang sama. Jangan membuat global types hanya karena file types.ts terlihat lebih kecil; yang penting adalah siapa yang memahami dan mengubah contract itu.
Bagian ini memengaruhi progres lesson.
Coding practice
WajibDibuka di workspace khususPlace course types and content
Pindahkan type filter dan empty-state copy ke feature courses agar owner serta import boundary lebih jelas.
Tujuan awal: Fokus di tab TSX.
Practice ini dibuka di workspace khusus. Buka practice untuk memakai editor, preview, dan cek otomatis.
Tombol selesai aktif setelah semua validasi wajib lolos.
Cek pemahaman
WajibJawab duluCek pemahaman singkat
Tempat awal yang paling masuk akal untuk type CourseFilter yang hanya digunakan course listing adalah
Progres lesson naik setelah jawaban benar.
Ringkasan
Wajib- Type dan content dimulai dekat feature yang memahami serta mengubahnya.
- Folder global bukan tempat default untuk seluruh constant dan type aplikasi.
- Shared extraction membutuhkan contract lintas feature yang nyata dan cukup stabil.
- Import path yang dekat owner membuat reason for change lebih mudah dibaca.
- Berikutnya, dependency boundaries memastikan feature tidak mengambil detail internal feature lain secara sembarangan.
Bagian ini memengaruhi progres lesson.
Langkah berikutnya
Selesaikan bagian penting lesson ini
Lanjutkan blok wajib berikutnya: Type dan content juga memiliki owner.