Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web development, networking and server security. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

МVC paradoks



Upotreba Model View Controller (MVC) kao obrasca za dizajniranje je opšte prihvaćeno kao najbolji vid modernih web aplikacija. Kao i svi drugi obrasci za dizajniranje MVC je višekratno rešenje za zajedničke probleme. MVC obrazac je namenjen rešavanju sledećih problema:

1.Podrška za više tipova klijenata
2.Smanjivanje duplikata kodova kada podržava više vrsta klijenata
3.Izolovanje domena logike od korisničkog interfejsa

Obratite pažnju na to da su stavke 2 i 3 zavisne od stavke broj 1. Podrška za više tipova klijenata je vodeća pokretačka snaga koja stoji iza MVC obrasca za dizajniranje. Evo nekoliko primera vrsta klijenata:


Koliko ovakvih različitih vrsta klijenata treba da podržavate? Ako imate miran pristup, onda Web pretraživači i API klijenti mogu biti kombinovani u jedan tip klijenata , koje možemo jednostavno nazvati korisničkim agentima. Verovatno ne pravite Native GUI. Tako da vam ostaju tri tipa klijenata da podržite.


Da li stvarno treba da koristite MVC obrasce za dizajniranje da bi podržali Korisničke agente, Administratorske procese i Testove jedinica? Verovatno ne. Time ne kažemo da nema koristi od izolacije domena logike od korisničkog interfejsa. Ipak, ako ne trebate da podržite više tipova klijenata, trebali bi razmisliti da li treba da koristite MVC obrasac za dizajniranje. Ima mnogo pristupa koji se mogu preuzeti za odvajanje domena logike od korisničkog interfejsa od kojih je jedan MVC.

Ovo me dovodi do MVC Paradox-a. Moderni MVC web frameworks nehotice podstiču spregu domena logike i korisničkog interfejsa. Ako ne treba da podržite višestruke tipove klijenata, onda razdvajanje domena logike od korisničkog interfejsa je jedini preostali razlog zbog koga bi trebali koristiti MVC obrasac za dizajniranje.

Moderni MVC web framework često zahteva veliku količinu opštenamenskog koda samo da bi podržao primarni tip klijenta Korisničkog agenta. Opštenamenski kod, tipično, malo pomaže pri podržavanju ostalih tipova klijenata Administratorskim procesima i Testovima jedinica. Kao rezultat dodatnog opštenamenskog koda, programeri često prave Fat Controllers (sporedni efekat MVC Paradox-a). Kontroleri preuzimaju previše odgovornosti, horizontalno i vertikalno. Vertikalno, kontroleri počinju da rade sa domenom logike koji bi trebao biti gurnut u Model Layer. Horizontalno, višestruki poslovi se gomilaju u pregršt kontrolera. Ovi različiti horizontalni poslovi bi trebali biti odovjeni u višestruke kontrolere. (Single Responsibility Principle). Dodatak koji su uveli moderni MVC web frameworks vodi direktno do ovih problema.

Kao kontrast, pogledajte Slim PHP 5 micro framework. Iako nije potpuno RESTful framework, ipak dobro obavlja poslove koje sam izneo ranije u postu. Evo “Hello world” primera na Slim početnoj stranici.

<?php
require 'Slim/Slim.php';
$app = new Slim();
$app->get('/hello/:name', function ($name) {
    echo "Hello, $name!";
});
$app->run();
?>


Postoji veoma mali dio opštenamenskog koda koji je uključen u zahtev User Agent-a. Kovanje i rukovanje novim rutama je veoma jednostavno. Postavljanje celog prednjeg-zadnjeg lejera aplikacije u jedan fajl se može činiti apsurdnim u početku. Ipak, ima dobre sporedne efekte što je očigledno ako počnete da rukujete domenom logike nevezano za vaš Model layer ili ako jedna ruta radi previše stvari. Ako vaša prednja-zadnja aplikacija je dovoljno velika, onda možete organizovati vaše rute u zasebne fajlove.

Ovaj post nije namenjen da vas obeshrabri da ne koristite MVC web framework. Ponekad je ovaj framework koristan. Kao i sa svakom tehnološkom odlukom, pažljivo birajte koji problem pokušavate da rešite i koja tehnologija bi bila najbolja da reši vaš problem. Ponekad izbor tehnologije može ugroziti samu namenu korišćenja te tehnologije, kao što je slučaj sa MVC Paradox-om.



Published (Last edited): 09-12-2012 , source: http://bradley-holt.com/2012/04/the-mvc-paradox/