Jump to content
php.lv forumi

Pēc kāda principa ir pareizi?


Kristabs

Recommended Posts

Es nevaru pats izdomāt kā būtu pareizi kodēt OOP. Piemēram, ziņu iegūšanai no DB. Ir piemēram ziņas un katrai ziņai ir Virsraksts, Bilde, Teksts. Pēc kāda principa būtu vispareizāk taisīt klasi, ja vajadzēs piemēram pēdējo vienu ziņu, pēdējās trīs un visas un no dažādām kategorijām.

 

Visvieglāk lietojamais variants man nāk prātā:

//Bishkji biju savaadaak domaajis savaa piemeeraa, izlaboju
class News{
var $ids;

function get_last_news_ids($category, $limit){ $this->ids = array('2','23','43'); }

function get_news_info_by_id(){
//get by $this->ids; from db 
$news['title'];
$news['foto'];
$news['text'];
return $news; 
}

}

Bet šajā variantā ir uz katru ziņu viens selekts. Iesakiet labu un ērti lietojamu variantu.

Edited by Kristabs
Link to comment
Share on other sites

Atvainojos par garo penteri, bet jēga tam būtu apm. tā:

class News {
private $id = NULL;	
private $title = NULL;	
private $foto = NULL;	
private $text = NULL;	  
private $cat_id = NULL;	
private $date = NULL;

public function set($key,$value) {
	if(isset($this->$key)) {
		$this->$key = $value;			
	} 		
}
public function get($key) {
	if(isset($this->$key)) {
		return $this->$key;
	}
}
public function fill($row) {
	foreach($row as $key => $value) {
		$this->set($key,$value);
	}
}
}

class NewsMapper {

public function find($id) {
	$res = mysql_query("SELECT * FROM news WHERE id=$id");
	$row = mysql_fetch_array($res);
	$news = new News();
	$news->fill($row);
	return $row;		
}
public function findByCategorie($cat_id,$ofset = 0,$limit = 10,$order = 'date') {
 // te dabonam ziņas kategorijai
 // atgriežam kā objektu massīvu	
}
public function findByDate($date_no,$date_lidz) {
 // te dabonam ziņas pēc dauma
 // atgriežam kā objektu massīvu		
}
public function save(News $news) {
  // te saglabājam ziņu datubāzē	
}
}

$zinuMappers = new NewsMapper();
// atrodam ziņu pēc id

$zina = $zinuMappers->find($zinasId); 
// dabonam ziņas kategorijā

$zinas_kategorija = $zinuMappers->findByCategorie($cat_id);
// dabonam ziņas noteiktā laika periodā

$zinas_pec_laika = $zinuMappers->findByDate($datums_no,$datums_lidz);
// izmainam ziņu un saglabājam

$zina->set('title','Jauns virsraksts');
$zinuMappers->save($zina);

Protams, tik kā ilustrācija. Lasi par design patterns un oop pamatiem

Edited by john.brown
Link to comment
Share on other sites

Es atkārtošos ar savu piemēru:

 

class MyTable
{
function initFromData( $postData )
  {
   $this->newData-> ...
  }

function insert() {}
function update() {}
function initFromDb( $id ) { $this->data-> ... }
}

 

Šis te bija ~`Model `

 

Plus papildus var uztaisīt klasi, kas māk `nodizainēt` (~`View`)

a Controlieri var rakstīt kā vēlies un kad vēlies, jo tā jau ir MVC priekšrocība, jo tiek atdalītas loģikās daļas...

Edited by Delfins
Link to comment
Share on other sites

Atvainojos par garo penteri, bet jēga tam būtu apm. tā:

class News {

private $id = NULL;

private $title = NULL;

private $foto = NULL;

private $text = NULL;

<snip-snip/>

 

J. Brūnais visu īsuma pateica preizi :) Reku links vispārizglītojošā virzienā par krisab'a oriģinālo jautājumu:

Object Relational Mapping (ORM)

 

Lai atvēsināt iztēli, jāpiebilst, ka gandriz visi ORM sucks, un katrs programmētajs parasti uzskata par goda lietu uztaisīt savu, labāku.

Iesaku pasmelties idejas no Java Hibernate

Iekš PHP nopietnākais ORM ir Propel .

Link to comment
Share on other sites

saspiedušies jau visi ir ar OOP, bāž kur vajag un biežāk gan kur nevajg. tač tavām vajdzībām pietiek ar vienu mazu funkciju kura apstrādā viena maza kverija datus, kur tu tur vēl klasi liksi?

 

kad vienreiz sapratīsies, ka OOP jēga parādās tikai tad, ja to uztaisa fleksiblu, var bez sāpēm nēsāt no viena projekta uz otru un bez nekādām izmaiņām to tur pielietot, a ko šeit? gribēsi bildīti zemāk, rakstīsi jaunu klasi, vai manīsi esošo?

Link to comment
Share on other sites

goldy, a moš tas viņam ir pirmais projekts, un šito klasi izmantos citos projektos?! Vēlāk vēl apkarinās ar visādām lietām...

 

Tu vnk padaudz `uzbrauci`... tikpat labi var katram pretī ejošam smēķētajam bļau - "nafig pīpēt, tas tači neveselīgi"... a vot, katrs trešais tagad ir pīpmanis...

 

Tāpēc arī var daudz strīdēties, kur OOP ir `īstais` un kur `mēsls`... gaumes lieta... tomēr, kas attiecās uz PHP un Engine-based saitiem, tad OOP tur dara savu darbu uz visiem 200%...

 

piemērs: klase `ZinjuViews` labi saprotās ar klasēs `ProduktuZinjas` un `SaitaZinjas`...

 

product.php:

$nl = new NewsList();
$nV = new NewsView($nl);
$nV->draw();

 

news.php:

$pnl = new ProdNewsList();
$nV = new NewsView($pnl);
$nV->draw();

Link to comment
Share on other sites

2 goldy

kad vienreiz sapratīsies, ka OOP jēga parādās tikai tad, ja to uztaisa fleksiblu, var bez sāpēm nēsāt no viena projekta uz otru un bez nekādām izmaiņām to tur pielietot

Bet tā jau ar ir. Sāc rakstīt oop, pielietot design patterns, un pēc kāda laika jauns projekts sākas ar to, ka tu kopē folderī klašu "skeletu", un pieliec klāt tik atsevišķas ekstensijas pamat klasēm :) Rakstīt kļūst jauki un patīkami :P

Bez tam koda pavadīšana iekš oop ir daudz reālāka, kā procedūrās - tu pilnīgi noteikti zini, kur kas atrodas, nekādu rakšanos caur libiem, tipa "ar kur es to funkciju iebāzu"...

Nē, kad esi iebraucis iekš oop kaifiem, atteikties no tiem vairs negribas :)

Link to comment
Share on other sites

×
×
  • Create New...