Reference · Backend

Layered architecture ASP.NET Core Web API

Ringkasan satu halaman. Dari Lesson 0001.

Alur request

HTTP→Middleware→ Controller→Service→ Repository→DbContext→DB

Hasil kembali sebagai DTO, dan Controller memilih status HTTP-nya.

Folder & tanggung jawab

FolderBoleh berisiTidak boleh berisiPadanan Express
Controllers/Routing attribute, binding, pilihan status codeAturan bisnis, query DBroutes + controllers
DTOs/record request/responseLogikaZod/Joi schema
Services/Aturan bisnis, mapping Entity ↔ DTOHttpContext, ActionResult, DbContextservices/
Repositories/Query & simpan via DbContextAturan bisnisdata-access layer
Models/Entity (Product, Category)Atribut HTTPPrisma model
Data/AppDbContext, MigrationsAturan bisnisPrisma client + migrate
Config/Kelas Options, extension AddXxx()Secret (taruh di User Secrets/env)config/ + .env
Program.csRegistrasi DI, urutan middlewareLogika bisnisapp.js / server.js

Tiga aturan

  1. Layer hanya memanggil layer di bawahnya. Controller tidak memakai DbContext langsung, dan tidak berisi aturan bisnis. [1] [3]
  2. Bergantung pada interface (IProductService, IProductRepository), bukan kelas konkret dan tanpa new. [2]
  3. Hanya composition root (Program.cs) yang tahu implementasi konkret. [1]
builder.Services.AddDbContext<AppDbContext>(o => o.UseSqlServer(cfg.GetConnectionString("Default")));
builder.Services.AddScoped<IProductRepository, ProductRepository>();
builder.Services.AddScoped<IProductService, ProductService>();
builder.Services.Configure<JwtSettings>(cfg.GetSection("Jwt"));

Jawaban 60 detik

Layered dalam satu project. Controller = HTTP, Service = aturan bisnis, Repository = akses data via EF Core. DTO memisahkan kontrak API dari skema DB. Semua bergantung pada interface dan disambungkan di Program.cs (composition root), sehingga Service bisa di-unit-test dengan mock. Config lewat appsettings + Options Pattern. Kalau domain bertambah kompleks, pindah ke Clean Architecture.

Pertanyaan lanjutan yang mungkin muncul

Sumber: [1] Microsoft Learn: Common web application architectures · [2] Dependency injection in ASP.NET Core · [3] Handle requests with controllers · [4] Tutorial web API: Prevent over-posting · [5] Options pattern