Logika web aplikacija

Na DevProTak forumu se (opet) povela interesantna diskusija o template engineima (Smarty i bratija) i srodnim pitanjima, kroz offtopic naravno. Jedna od zanimljivih stvari u diskusiji je tvrdnja jednog učesnika da ne koristi nikakvu logiku unutar templatea i da voli da mu je sva logika na jednom mestu, tj. unutar aplikacije. Ta tvrdnja me je navela da opišem sistem koji smatram dobrim i kako je logika raspoređena u njemu. Sistem koji trenutno koristim se bazira na MVC (skraćeno za Model View Controller) načinu odvajanja osnovnih delova aplikacije:

  1. Model - uređuje pravila koja važe između objekata sa kojima aplikacija barata
  2. View - prikaz rezultata obrade
  3. Kontroler - zadužen za obradu korisnikovog zahteva

U tako uređenom sistemu postoje tri precizno razgraničene logike:

  1. Biznis logika (često se još naziva modeom) je skup pravila koja važe među objektima sa kojima aplikacija barata. Na primer, članak pripada kategoriji; kada se kategorija obriše svi članci iz te kategorije se takođe brišu i resetuje se globalni brojač. Ili pak, ako posetilac ostavi komentar na članak diže se popularnost kategorije kojoj članak pripada. Dakle, to su neka interna pravila kojih su objekti svesni i koja poštuju.
  2. Kontrolerska logika je logika koja se koristi za obradu korisničkog zahteva. Korisnik od aplikacije zatraži članak broj 12; ako ga aplikacija ne nađe korisnik dobija poruku o grešci. Ako ga nađe, proverava se da li korisnik može da pristupi tom članku. Ako sme isti se štampa na ekran, a ako ne korisnik dobija poruku o grešci gde se kaže da nema potrebne dozvole da bi video zatraženi članak. Primetite razliku između ovoga i model logike - ovde je sve o tome kako uslužiti korisnikov zahtev, ne kako su objekti međusobno povezani i koja pravila važe među njima.
  3. Prezentaciona logika se brine samo o prikazu podataka. Primer za ovo je određivanje da li je red tabele paran ili ne i bojanje u skladu sa tim ili pak odlučivanje da li da se prikaže određeni blok ili ne u skladu sa prosleđenim podacima (nema poente prikazati logout opciju ako nemamo ulogovanog korisnika).

Ovakav način odvajanja se možda u početku čini suviše komplikovan, ali je u suštini prilično jednostavan i logičan. U nekom od narednih tekstova ću opisati na konkretnom primeru kako se ovaj sistem primenjuje, zašto ima smisla i koje su mu prednosti.