Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pocetnicka pitanja oko OOP i MVC

[es] :: PHP :: Pocetnicka pitanja oko OOP i MVC

[ Pregleda: 2457 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

stex

Član broj: 718
Poruke: 374
*.dynamic.sbb.rs.

Sajt: stivi.on.neobee.net


+21 Profil

icon Pocetnicka pitanja oko OOP i MVC23.09.2011. u 16:43 - pre 153 meseci
Poceo sam da ucim OOP i MVC ali mi neke stvari nisu bas najjasnije pa ako vam nije tesko da mi ih pojasnite.
Recimo imam neku (nedovrsenu) primitivnu aplikaciju telefonski imenik cisto kao primer.

index.php
Code:
<?php

include "model/sql.php";
include "model/tmp.php";
include "controller/Controller.php";

$page = new tmp("view/main.tpl");

$controller = new Controller();
$page->set("page", $controller->invoke());
echo $page->display();

?>

U model/sql.php imam openConn, closeConn, query, query_one. U model/tmp.php mi se nalazi kao neki engine koji uzima template (cist html) i u njega ubacuje podatke sa set(“key”, “value”).

controller/Controller.php
Code:
<?php

require "model/pbook.php";

class Controller {

public $pbook;

function __construct() {
$this->pbook = new pbook();
}

function invoke() {
switch ($_GET['action']) {
case "show_pbook":
return $this->pbook->show_pbook();
break;
case "edit_form_pbook":
return $this->pbook->edit_form_pbook();
break;
//itd...
default:
return $this->pbook->show_pbook();
break;
}
}

}

model/pbook.php
Code:
<?php

class pbook {

function show_pbook(){
$x = new tmp("view/show_pbook.tpl");
$x->set('naslov','ovo je test');

$q = new sql();
$sql = $q->query('SELECT * FROM imenik');
if($sql){
while ($r = mysql_fetch_array($sql)) {
$x->getBlock(1);
$key = array('id', 'name', 'mobile');
$value = array($r['id'], $r['name'], $r['mobile']);
$x->set($key, $value);
}
$x->getBlock(2);
}
return $x->display();
}

function edit_form_pbook(){
$x = new tmp("view/edit_pbook.tpl");
$key = array('id','name','mobile');
if($_GET['id']){
$q = new sql();
$r = $q->query_one('SELECT * FROM imenik WHERE id = "'.$_GET['id'].'"');
$value = array($r['id'], $r['name'], $r['mobile']);
}else{
$value = array('', '', '');
}
$x->set($key, $value);
return $x->display();
}

function add_edit_pbook(){
//ovde sad ide neki kod za unos ili korekciju
}
function delete_pbook(){
//ovde sad ide neki kod za brisanje
}
}
?>

Templejti su nebitni sada...

Koliko sam razumeo Controller.php (iz Controller) uzima i prociscava sve od korisnika. A zatim u zavisnosti od akcije pozivam klase/metode iz Modela, koje opet povlace templejt fajlove (View).

Da li je ovaj nacin rada ispravan i gde gresim? Da li sam dobro shvatio koncept MVC? OOP?

Da li je problem sto nemam bas nikakav php kod u View delu? Sve petlje (for, foreach, while itd) drzim u Modelu. Time sam hteo da potpuno eliminisem php kod od html.

Negde sam procitao da metoda ne bi trebalo da ima vise od par redova. A moje metode u klasi pbook imaju bas dosta redova. Ali ne vidim kako bih mogao da ih smanjim.

Ako u jednoj metodi treba da imam vise sql upita ili petlja, da li je bolje da ih sve ostavim u jednoj metodi ili je bolje da ih nekako razbijem u vise?


stivi.on.neobee.net
 
Odgovor na temu

b0ris
Boris Vujicic
Senior PHP programer
Beograd

Član broj: 126587
Poruke: 158
*.adsl-a-3.sezampro.rs.



+2 Profil

icon Re: Pocetnicka pitanja oko OOP i MVC24.09.2011. u 13:26 - pre 153 meseci
Cini mi se da nisi bas dobro shvatio koncept oop i mvc.

OOP znaci objektno orjentisano programiranje, sam naziv ti govori na koji nacin treba da kreiras svoje klase.
Na primer tvoj model pbook i nije neki model, on samo izvrsava upite, tako da to pretstavlja interfejs za laksi rad sa bazom.

Da bi bio pravi model, klasa treba da definise neke elemente ponasanja. Recimo.
Code:

class PBook{
  private $id;
  private $mobile;
  private $name;
}


Na ovaj nacin si definisao atribute tvog modela. Sad ovo podseca na model imenika.
Zatim mozes definisati funkcije koje postavljaju i vracaju podatke.
Code:

class PBook{
  private $id;
  private $mobile;
  private $name;

  public function getMobile(){
    return $this->mobile;
  }

  public function setMobile($mobile){
    // Ovde radis neku proveru da li je podatak ok ako nije izbacis gresku.
    if($this->isMobileOk($mobile)){
      $this->mobile = $mobile;
    }
    else{
      // Ovde baci gresku, ili recimo vrati null, tako da gresku mozes na drugom mestu da obratis.
      // throw ili return
    }
    return $this;
  }
  // Ovde idu ostale metode
}


Ovaj nacin napisan gore ti omogucava da definises svoj model i nacin ponasanja atributa.
Recimo da odlucis da dodas format telefona. Mnogo je lakse dodati promenljivu format, kojom bi opisao format telefona (nego menjati sve querije).
Kad vec kreiras objekt na taj nacin on pretstavlja model.

Jedna od stvari koje ljudi mesaju je da je u MVC patternu model = baza. To prosto nije tacno jer postoji vise nacina na koji taj model moze biti sacuvan.

Dobar nacin da to postignes je da nasledis model klasu koja bi definisala nacin zapisivanja (recimo).
Code:

class Model{
  private $db_type = 'mysql'; // Moze biti i neki drugi tip baze u pitanju, recimo MongoDB
  // Ovde idu sve karakteristicne promenljive za bazu.

  // Zatim prate sve metode za cuvanje i dohvatanje.
  public function find($name, $value){
    // Sad ovde ide query ili dohvaanje u zavisnosti koji model baze je definisan
    mysql_query('SELECT * FROM '.$this->tableName.' WHERE '.$name.' = '.$value);
    // Ovde naravno mozes da napravis logiku querija u slucaju da je value string ili int i tako dalje.
    // ....
  }
}

Tvoja PBook klasa bi nasledila ovaj model i samim tim imala mogucnost cuvanja podataka na nacin na koji ti definises.

Zatim takvom klasom manipulises u kontroleru gde i spremas podatke za ispis u view.
primer kontrolera.
Code:

class PBookController extends Controller{
  ...
  public function show(){
    $id = $_GET('id'); // Recimo inace bi ovde isao neki $request->get('id');
    $pbook = new PBook();
    $pbook->find('id', $id);
    $data['name'] = $pbook->getName();
    $this->renderView('pbook', $data);
  }
  ...
}



Sastavio sam ovo na brzinu, ako ima nekih nejasnoca (mozda sam nesto lose napisao ili nerazumljivo) izvinjavam se unapred.
---------------------------------------------------------------------
Just do it.
 
Odgovor na temu

stex

Član broj: 718
Poruke: 374
*.dynamic.sbb.rs.

Sajt: stivi.on.neobee.net


+21 Profil

icon Re: Pocetnicka pitanja oko OOP i MVC24.09.2011. u 17:59 - pre 153 meseci
Nisam ni mislio da sam dobro shvatio. Na netu nalazim samo jednostavne primere klasa (tipa kalkulator), a nigde primer cele aplikacije pa da vidim kako to stvarno treba da izgleda. Do sad sam radio samo proceduralno, sto se verovatno primeti po kodu iz prvog posta, pa mi je verovatno malo teze da shvatim ceo koncept bez konkretnog primera.
stivi.on.neobee.net
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.dynamic.sbb.rs.

Sajt: norway.dakipro.com


+190 Profil

icon Re: Pocetnicka pitanja oko OOP i MVC24.09.2011. u 19:49 - pre 153 meseci
Skini neki od MVC frameworka pa vidi sta su i kako oni radili. Ima takodje i open source CMSova na MVC frameworcima pa vidi source neke od tih aplikacija kako su radjene.
Recimo CodeIgniter ili zend framework, i procitaj par visoko rejtovanih tutorijala kako se radi sa tim frameworcima pa ces pohvatati konce, nije komplikovano nista uglavnom a kad jednom prihvatis nacin rada bice ti jasno zasto i kako se koristi bas tako
 
Odgovor na temu

m.stojanov
Test Test

Član broj: 126777
Poruke: 231
*.3gnet.mts.telekom.rs.



+3 Profil

icon Re: Pocetnicka pitanja oko OOP i MVC09.10.2011. u 23:51 - pre 152 meseci
Na koje tacno tutorijale/knjige mislis kada kazes visoko rejtovani?
 
Odgovor na temu

Sauron
Nemanja Pantoš
Administrator informacionih sistema u
Pokrajinskom sekretarijatu za
informacije Izvršnog Veća AP..
Futog

Član broj: 780
Poruke: 417
*.vojvodina.gov.rs.

Jabber: sauron@elitesecurity.org
Sajt: www.tolkien.rs


+1 Profil

icon Re: Pocetnicka pitanja oko OOP i MVC17.11.2011. u 12:38 - pre 151 meseci
Ja bih ti preporučio ovaj video tutorijal za CodeIgniter.
http://net.tutsplus.com/sessions/codeigniter-from-scratch/
10 SIN
20 GOTO HELL
 
Odgovor na temu

[es] :: PHP :: Pocetnicka pitanja oko OOP i MVC

[ Pregleda: 2457 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.