Deo zbornika Uvod u softversko inženjerstvo
Front kontroler
Prednji kontroler (front controller) je arhitektonski obrazac koji služi za centralizovanje obrade zahteva koje aplikacija prima. Prema ovom obrascu, jedan kontroler prima sve zahteve izvana i prosleđuje ih gde treba unutar aplikacije. Ovo omogućuje objedinjeno upravljanje rutama, sigurnošću i filtriranjem zahteva.
Front kontroler se često koristi u web aplikacijama i MVC arhitekturi, gde omogućuje upravljanje zahtevima pre nego što stignu do konkretnih kontrolera. Koristi se u okviru popularnih web okvira kao što su Spring MVC (Java), ASP.NET MVC (.NET), Express.js (Node.js) i mnogim drugim.
Karakteristike
- Centralizovana kontrola. Svi zahtevi prolaze kroz jedan centralni kontroler, što olakšava upravljanje pristupom, proveru autentikacije i autorizacije, kao i primenu filtera.
- Jednostavnije rutiranje. Front kontroler može da usmerava zahteve ka odgovarajućim kontrolerima ili akcijama, što pojednostavljuje rutiranje u aplikaciji.
- Ekstenzibilnost. Dodavanje novih funkcionalnosti, kao što su logovanje i autentifikacija, može se obaviti na jednom mestu bez izmene drugih delova koda.
- Poboljšana konzistentnost. Korišćenjem front kontrolera postiže se doslednost u rukovanju zahtevima jer svi zahtevi prolaze kroz isti kontrolni sloj.
Primer
U ovom primeru koristimo Express.js u Node.js aplikaciji kao front kontroler koji rukuje zahtevima.
const express = require('express')
const app = express()
// middleware za autentifikaciju
app.use((req, res, next) => {
console.log(`Pristup zahtevu: ${req.method} ${req.url}`)
next()
})
// definisanje ruta
app.get('/home', (req, res) => {
res.send('Početna stranica')
})
app.get('/user', (req, res) => {
res.send('Korisnička stranica')
})
// pokretanje servera
app.listen(3000, () => {
console.log('Server radi na portu 3000')
})
U ovom primeru, app
predstavlja front kontroler. Svi zahtevi dolaze prvo do njega, gde se primenjuje posrednik (middleware) za autentifikaciju zahteva, pre nego što budu usmereni ka odgovarajućim rutama.