Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Internet > Web razvoj > Serverske aplikacije i baze podataka

Serverske aplikacije i baze podataka PHP, Perl, ASP, ASP .NET, ColdFusion...
MySQL, PostgreSQL, MSQL, Oracle...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 21.1.2013, 12:11   #1
clzola
Član
 
Član od: 14.4.2010.
Lokacija: Podgorica
Poruke: 332
Zahvalnice: 61
Zahvaljeno 11 puta na 11 poruka
Određen forumom [php] Model View Controller

Znam sta Model View Controller (MVC) predstavlja i kako bi to trebalo da funkcionise ali problem je sto ne znam da ga direktno primjenim. Citao sam razne clanke kako ovo iskoristiti sa PHP + MySQL kombinacijom ali nikako da ja sam napisem jedan MVC. Koristio sam yii framework, citao njegov kod koji generise ali tu je toliko nasledjivanja i cuda da se ja ne mogu snaci.

Treba mi vasa pomoc da mi pomognete da osmislim sve i da citav MVC sam otkucam, tj. direktno primjenim na mom primjeru jer od citanja drugih kodova nema vajde. Takodje razliti clanci koje sam citao neke stvari razlicito rade. Imam bazu 'MyContacts' sa tabelama 'user' i 'phonebook'.

Kod:
-- -----------------------------------------------------
-- Table `MyContacts`.`user`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `MyContacts`.`user` ;

CREATE  TABLE IF NOT EXISTS `MyContacts`.`user` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `username` VARCHAR(45) NOT NULL ,
  `password` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`id`) ,
  UNIQUE INDEX `username_UNIQUE` (`username` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `MyContacts`.`phonebook`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `MyContacts`.`phonebook` ;

CREATE  TABLE IF NOT EXISTS `MyContacts`.`phonebook` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NOT NULL ,
  `surname` VARCHAR(45) NOT NULL ,
  `phone` VARCHAR(45) NOT NULL ,
  `userid` INT UNSIGNED NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `FK_User` (`userid` ASC) ,
  CONSTRAINT `FK_User`
    FOREIGN KEY (`userid` )
    REFERENCES `MyContacts`.`user` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
Aplikaciju sam odradio koristeci klase, ali to nije MVC. Ispod su slike kako to sada izgleda, a treba priblizno da odradim samo da koristim MVC.
login.php: http://www.dodaj.rs/f/1u/zI/4ZdSVvIY/ssloginpage.png
register.php: http://www.dodaj.rs/f/3T/57/3zmapjKm/ssregisterpage.png
home.php: http://www.dodaj.rs/f/3M/oY/1XJLAie3/sshomepage.png
add.php: http://www.dodaj.rs/f/1p/Co/1nxwqjTB/ssaddpage.png
delete.php: http://www.dodaj.rs/f/3h/Qx/yLq6AtZ/ssdeletepage.png


Prvi problem na koji nailazim je sto ne znam sta mi od klasa sve treba. Koliko sam ja do sada shvatio trebace mi model klase 'User' i 'Phonebook'. Sada ne znam sta ove klase treba da sadrze od atributa i metoda. Na primer, da li klasa 'User' treba da sadrzi atribute 'id', 'username' i 'password' ili umjesto njih da sadrzi jedan niz koji sadrzi imena atributa u tabeli:
Kod:
$labels = array("id", "username", "password");
Ili cak ni to vec samo metode kao sto su: getByPrimaryKey, getByUsername, getByPassword, getLabels... Isto pitanje za klasu 'Phonebook'.

Dalje potrebni su mi kontroleri, 'UserController' i 'PhonebookController'. Koje metode treba da sadrze kontroleri? Da li ove klase treba da sadrze metode za INSERT, SELECT i UPDATE ili to treba da bude u modelu. Da li UserController treba da sadrzi metodu za login?

View, u ovoj aplikaciji imam login formu, formu za registraciju, tabelu koja prikazuje kontakte, formu za dodavanje kontakta i formu za brisanje kontakta. Da li mi trebaju klase UserView i PhonebookView, gdje ce UserView da sadrzi dva view-a loginView i registerView, a PhonebookView da sadrzi addView, deleteView, tableView. Da ove klase imaju metode za svaki view posebno i da ih onda iz kontrolera pozivam. Na primer za prikazivanje svih kontakata da ide ovako:
Kod:
controller->actionName() {
    // sada znam da treba da prikazem sve iz tabele
    // (da li treba ovdje da pozovem metodu koja
    //  ce da mi vrati sve upise iz baze gdje je
    //  phonebook.userid = user.id, pa da to predam
    //  ovoj dolje funkciji.)
    view->render("tableView", userid)
}
Ako neko moze da mi u kratkim crtama i napise kod, ne treba sad tu da pise sve i detaljise, samo da navede metode i atribute, prokomentarise sta za sta sluzi, cak i ne mora da bude php kod moze i pseudo, samo u kratkim crtama da mi se objasni kako bi trebao da izgleda MVC za ovu moju aplikaciju. Jos jedna stvar, da li treba da implementiram da se preko url pozivaju kontroleri, modeli i view. Na primjer:
Kod:
www.mycontacts.net/controller/action

// za prikaz home.php stranice (vidi sliku)
www.mycontacts.net/phonebook/home

// Tada bi ovaj url uzeo kontrolera phonebook, procitao ovo 'home'
// i pozvao funkciju actionHome recimo, koja bi pozvala view->render("tableView" ili "home")
I nije mi jasna cijela stvar oko instanciranja. Da li klase koje predstavljaju modele, controller-e i view-ove trebaju da budu singleton?

Huh, mnogo sam ispisao, ali potrebno mi je ovo da sto bolje shvatim jer cu u skorijoj buducnosti da radim sa ovim. Hvala svakom ko bude imao zivaca da sve ovo procita a tek da mi barem malo pomogne
clzola je offline   Odgovor sa citatom ove poruke
Stara 6.5.2013, 1:30   #2
dusandevic
Član
 
Član od: 23.8.2008.
Lokacija: Sremska Mitrovica
Poruke: 105
Zahvalnice: 8
Zahvaljeno 16 puta na 12 poruka
Slanje poruke preko MSN-a korisniku dusandevic Slanje poruke preko Skypea korisniku dusandevic
Određen forumom Re: [php] Model View Controller

Nadam se da nije kasno za odgovor!

MVC i OOP nisu ista stvar.

MVC je pattern po kojem tri zasebne celine (Model, View i Controller) stupaju u međusobnu interakciju, u slučaju PHP-a to obično ide ovako:

Zahtev dolazi od korisnika, obično preko URL-a i završava na Controlleru. Dakle korisnik gađa određeni kontroler, odnosno njegovu metodu. U slučaju da određene podatke treba povući iz baze, Controller će pozvati određeni Model. Model komunicira sa sistemom za upravljanje bazom podataka i vraća Controlleru određene podatke. Controller onda te podatke može da prosledi na neki View. View uzima podatke i generiše HTML kod koji se prikazuje krajnjem korisniku.

Dakle, Controller je glavni baja i upravlja procesom obrade određenog zahteva. Model je zadužen za sve što ima veze sa perzistencijom određenih podataka a View je zadužen za prikaz krajnjem korisniku.

Zašto se ovo radi?
Iz više razloga, ali između ostalog i zbog takozvanog loose coupling principa po kojem komponente sistema traba što manje da zavise jedna od druge. Drugim rečima, ako ikada poželiš da promeniš sistem za upravljanje bazom podataka (npr. sa MySQL prelaziš na Oracle), samo treba da regulišeš model. Još gore, ako skroz izbaciš sistem za upravljanje bazom podataka i rešiš da podatke čitaš iz XML-a ili čak tekstualnog fajla, samo treba da čeprkaš po modelu, ostalo ne diraš (postoje izuzeci, o tom po tom). Takođe, ako rešiš da sajt optimizuješ za pristup sa mobilnog uređaja, bojlera, pegle ili nekog drugog smart čuda, samo treba da regulišeš stvari u View.

MVC se obično implementira tako što se napravi bar po jedan objekat za M, V i C. Ima nekih pristupa koji kažu npr. one table = one model ali to je na tebi kako ćeš rešiti implementaciju.
dusandevic je offline   Odgovor sa citatom ove poruke
Sledeći korisnik se zahvaljuje korisniku dusandevic na korisnoj poruci:
clzola (4.1.2014)
Odgovor

Bookmarks sajtovi

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Generals Zero Hour - ShockWave Release 1.0 Васили Strateške igre 50 20.8.2015 17:41
Ubuntu 10.04 i wireless coge intrare Komunikacioni uređaji i umrežavanje 0 5.7.2011 19:45
Neko uživa u Linuxu, a neko pada u depresiju pmale Slobodni softver 63 8.2.2010 13:19
Fedora vs Broadcom barjaktar Slobodni softver 20 27.7.2009 13:53
Wirelles i Ubuntu Djordje Turjacanin Slobodni softver 14 19.12.2008 23:40


Sva vremena su po Griniču +2 h. Sada je 0:45.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2022, vBulletin Solutions, Inc.
Hosted by Beograd.com