Software design adalah keputusan tentang bagaimana memecah kode menjadi bagian-bagian yang dapat dipelihara. Section ini membahas prinsip dan pola arsitektur yang umum dipakai.

# Clean Code

Pelajari prinsip clean code: nama bermakna, fungsi kecil, single responsibility, dan komentar yang menjelaskan mengapa bukan apa.

Buka →
# SOLID Principles

Pelajari lima prinsip SOLID: Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, Dependency Inversion.

Buka →
# Separation of Concerns

Pelajari pemisahan tanggung jawab antar layer: UI, business logic, dan data, dengan contoh kode konkret.

Buka →
# Dependency Inversion

Pelajari Dependency Inversion Principle: bagaimana modul tingkat tinggi bergantung pada abstraction, bukan concretion, sehingga kode menjadi mudah diganti dan diuji.

Buka →
# Dependency Injection

Pelajari pola Dependency Injection di Kotlin: constructor, setter, dan field injection, serta perbandingan container manual dengan framework seperti Koin, Dagger Hilt, dan Spring.

Buka →
# Composition over Inheritance

Pelajari mengapa composition lebih fleksibel daripada inheritance mendalam, dan bagaimana menyusun object dari perilaku-perilaku kecil menggunakan interface di Kotlin.

Buka →
# Immutability

Pelajari immutability di Kotlin: pakai val alih-alih var, copy data class alih-alih mutate, dan dapatkan thread-safety secara default.

Buka →
# Domain Modeling

Pelajari domain modeling di Kotlin: value objects, entities, aggregates, dan bounded contexts untuk merepresentasikan aturan bisnis dalam kode.

Buka →
# Layered Architecture

Pelajari layered architecture: presentation, application, domain, dan infrastructure, serta bagaimana setiap layer hanya bergantung pada layer di bawahnya.

Buka →
# Clean Architecture

Pelajari Clean Architecture: entities, use cases, interface adapters, dan frameworks, dengan aturan dependency yang ketat dari luar ke dalam.

Buka →
# Hexagonal Architecture

Pelajari Hexagonal Architecture (Ports and Adapters): memisahkan core domain dari driving adapter dan driven adapter, sehingga aplikasi mudah diganti UI maupun sumber data.

Buka →
# Domain-Driven Design

Pelajari Domain-Driven Design: strategic design dengan bounded contexts dan ubiquitous language, tactical design dengan entities, value objects, aggregates, repositories, dan domain services.

Buka →
# Design Patterns

Pelajari katalog design patterns GoF: creational, structural, dan behavioral, dengan implementasi idiomatic Kotlin yang memanfaatkan fitur bahasa modern.

Buka →
# Factory Pattern

Pelajari Factory Pattern di Kotlin: companion object sebagai factory, generic interface Factory<T>, dan sealed class factory untuk parsing input terstruktur.

Buka →
# Builder Pattern

Pelajari Builder Pattern di Kotlin: data class dengan default parameter, named arguments, scope function apply, dan DSL-like nested config.

Buka →
# Strategy Pattern

Pelajari Strategy Pattern di Kotlin: interface Strategy klasik dan function type sebagai alternatif idiomatic yang lebih ringkas.

Buka →
# Observer Pattern

Pelajari Observer Pattern di Kotlin: Subject + Observer klasik, function-based subscriber, dan implementasi StateFlow-like yang terinspirasi dari ReactiveX.

Buka →
# Adapter Pattern

Pelajari Adapter Pattern di Kotlin: class adapter untuk interface tidak kompatibel, extension function sebagai adapter idiomatic, dan adapter untuk koleksi dan JSON.

Buka →
# Decorator Pattern

Pelajari Decorator Pattern di Kotlin: tambah behavior tanpa modifikasi original, dengan `by` delegation yang mengeliminasi boilerplate Java tradisional.

Buka →
# Repository Pattern

Pelajari Repository Pattern di Kotlin: abstract data access dengan generic interface Repository<T, ID>, decorator cache, specification pattern, dan adapter API.

Buka →
# Memilih Arsitektur Aplikasi

Pelajari cara memilih arsitektur yang tepat: decision tree sederhana untuk script tunggal, layered, clean, atau hexagonal, lengkap dengan trade-off dan evolusi.

Buka →