Implementasi Interface Kontrak — BAB 11
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah mengikuti halaman ini, kamu diharapkan dapat:
- Membuat file
repository-interface.tsbertipe Generic. - Membuat file
service-interface.ts. - Menjelaskan pentingnya interface kontrak dalam arsitektur aplikasi berlapis.
Pendahuluan
Section titled “Pendahuluan”Sebelum kita membuat Class database (Repository) dan Class logika bisnis (Service), kita harus membuat kontrak formal yang menentukan method apa saja yang wajib disediakan oleh class-class tersebut. Ini memastikan seluruh layer terhubung secara konsisten.
Penjelasan
Section titled “Penjelasan”Folder src/interfaces/ menyimpan file interface kontrak:
repository-interface.ts: Mendefinisikan method dasar operasi database (tambah, cari, update, hapus) menggunakan tipe GenericTagar bisa dipakai untuk objek apa saja.service-interface.ts: Mendefinisikan method khusus alur bisnis akademik siswa.
Analogi Kehidupan Sehari-hari: Buku SOP Petugas Sekolah
Section titled “Analogi Kehidupan Sehari-hari: Buku SOP Petugas Sekolah”Membuat interface kontrak seperti menulis buku Standard Operating Procedure (SOP) resmi sekolah:
SOP Petugas Database (IRepository) ├── Harus bisa MENAMBAH data (tambah) ├── Harus bisa MENCARI data (cariBerdasarkanId) └── Harus bisa MENGHAPUS data (hapus)Buku SOP tidak menuliskan bagaimana cara petugas mengarsipkan map di lemari (apakah diurutkan abjad atau nomor). SOP hanya mewajibkan bahwa tindakan tersebut harus bisa dilakukan oleh siapa pun petugas yang berjaga.
Visual Illustration: Kontrak Kerja Class
Section titled “Visual Illustration: Kontrak Kerja Class”Interface IRepository<T> ──► Mengharuskan adanya method [tambah, cari, update, hapus] │ ▼ diimplementasikan olehClass AcademicRepository<T> implements IRepository<T>(Wajib menulis kode instruksi untuk ke-4 method tersebut)Live Coding: Implementasi Interface Kontrak
Section titled “Live Coding: Implementasi Interface Kontrak”Langkah 1: Buat src/interfaces/repository-interface.ts
Section titled “Langkah 1: Buat src/interfaces/repository-interface.ts”// Interface kontrak database Genericexport interface IRepository<T> { tambah(item: T): boolean; ambilSemua(): T[]; cariBerdasarkanId(id: number): T | undefined; update(id: number, dataBaru: Partial<T>): boolean; hapus(id: number): boolean;}Langkah 2: Buat src/interfaces/service-interface.ts
Section titled “Langkah 2: Buat src/interfaces/service-interface.ts”import { Siswa } from "../models";
// Interface kontrak logika bisnis siswaexport interface ISiswaService { tambahSiswaBaru(nama: string, nis: string | number, kelas: string): void; updateNilaiSiswa(nis: string | number, nilai: number): void; hitungRataRataKelas(): number; tampilkanLaporanLengkap(): void;}Output
Section titled “Output”Kedua interface kontrak ini berhasil dibuat dan siap untuk di-implements oleh class-class di folder repositories/ dan services/.
Penjelasan Baris per Baris
Section titled “Penjelasan Baris per Baris”IRepository<T>: Menggunakan Generic<T>agar interface ini fleksibel digunakan untuk tipe data apa saja (Siswa, Guru, Buku, dll) di halaman selanjutnya (BAB 9).dataBaru: Partial<T>: Menggunakan Utility TypePartialbawaan TypeScript agar data update bisa dikirim secara sebagian/parsial (BAB 9).
Common Mistakes
Section titled “Common Mistakes”- Menulis tubuh fungsi di dalam interface: Menulis
{ console.log("tambah") }setelah nama method. Interface hanya boleh menampung tanda tangan fungsi (nama, parameter, return type), tidak boleh ada logika program di dalamnya.
Ringkasan
Section titled “Ringkasan”- Interface kontrak disimpan di folder
src/interfaces/. IRepository<T>menggunakan Generic agar serbaguna untuk berbagai entitas.- Menjamin semua class implementasi mematuhi aturan method secara konsisten.
Latihan
Section titled “Latihan”- Buat file
repository-interface.tsdanservice-interface.tsdi foldersrc/interfaces/komputermu. - Pastikan tidak ada error sintaks saat file disimpan.