2.2 KiB
2.2 KiB
name, description
| name | description |
|---|---|
| clean-code | Clean Code, Clean Architecture, SOLID principles untuk proyek Asepharyana Hub |
Clean Code — Asepharyana Hub
Prinsip Dasar
1. Naming
- Gunakan nama yang mengungkapkan intensi:
calculateTotal,fetchAnimeData,ImageCacheRepository— bukancalc,getData,Repo. - Boolean prefix dengan
is,has,should:isHealthy,hasPoster,shouldRetry. - Hindari singkatan kecuali sangat umum (
config,url,db).
2. Fungsi
- Satu fungsi = satu tanggung jawab. Max 20 baris.
- Nama fungsi sebagai kata kerja:
validateToken(),cacheImage(). - Parameter minimal: max 3 parameter. Lebih dari itu bungkus jadi struct/object.
3. Clean Architecture Layers
Domain → Entities, Repository traits, Error enums
Application → Use cases
Infrastructure → Implementasi konkret (SeaORM, Redis, HTTP clients)
Presentation → Axum handlers, DTOs, middleware
Dependency rule: kode layer dalam tidak tahu tentang layer luar. Domain gak import framework.
4. Error Handling
- Gunakan
thiserroruntuk domain errors, bukananyhowuntuk library code. anyhowhanya untuk binary/app entry point dan test.- Convert domain errors ke HTTP di presentation layer, bukan di use case.
5. Testing
- TDD mindset: tulis test sebelum implementasi untuk logic bisnis.
- Unit test untuk use case + domain (tanpa infra).
- Integration test untuk repository (dengan test container).
- Mock trait, bukan struct konkret.
Untuk Proyek Ini
Scraper Service (Rust)
src/domain/— tipe data murni, trait, error — tanpa frameworksrc/application/— use cases, orchestrasi, tanpa HTTPsrc/infrastructure/— implementasi repository, cache, HTTP clientsrc/presentation/— handler Axum, routing, middleware
Event-Driven (Dapr + NATS)
- Event schema pake CloudEvents format
- Topic naming:
hub.<domain>.<action>(e.g.hub.image.cached) - Handler hanya untuk satu tipe event, pisah file per domain
Infra Config (YAML)
- Satu compose file per service
- Networking via
app-shared-net - Image tag selalu
sha-<short-sha>, bukanlatestdi production