Attualmente sto rifattendo la mia DLL e BLL e ho bisogno di qualche consiglio su quale sia il modo migliore per lavorare con DAL e BLL.
La mia soluzione attuale è la seguente:
// DAL class only consists of SQL queries and returns SQL result
class DAL {
public function isBrandInList($brand)
{
$sql ="SELECT id FROM sl_label WHERE name = '$brand'";
$this->query($sql);
return $this->query_result;
}
}
// BLL will process data from DAL and return data to whatever function called the BLL function.
class BLL extends DAL {
public function isBrandInList($name)
{
$result = parent::isBrandInList($name);
if(mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_array($result)) {
return $row['status'];
}
} else {
return false;
}
}
}
Non penso che questo sia il modo migliore per lavorare e il mio file DAL ha oltre 1000 linee di codice e ha oltre 50 classi diverse. Sta diventando complicato.
Il mio piano è di migliorare questo e iniziare a usare MySQLi
/ PDO
e le istruzioni preparate.
Qualcuno può dirmi come posso migliorare il modo in cui scrivo il mio DAL e BLL? Dovrei creare una sottoclasse nel DAL, ad es. una sottoclasse per Persona e una sottoclasse per Marca?
Ho cercato su Google e ho esaminato diversi modelli di design. Molti di questi sono per .NET e non hanno buoni esempi.
E forse alcuni link ad alcuni buoni articoli? Quelli che ho trovato non sono stati i migliori.
Aggiorna
Questo è un esempio su come lo faccio oggi. Il codice seguente è solo frammenti e non l'intero codice.
//search.php
require_once('classes/search.class.php');
$search = new Search($_GET);
$result = $search->search();
echo $result;
//search.class.php
include('classes/bll.class.php');
class Search extends BLL {
private $store_term;
public function __construct($term) {
parent::__construct();
$this->get_search_term($term);
}
private function get_search_term($term) {}
public function search() {
if(!empty($this->store_term))
$result = $this->search_store();
return $result;
}
private function search_store() {
$result = parent::getStoresBySearch($this->store_term);
$html = 'Code for building html search result list here';
return $html;
}
//bll.class.php
class BLL extends DAL
{
public function __construct() {
parent::__construct();
}
public function getBrandsBySearch($term) {
$result = parent::getBrandsBySearch(mysql_real_escape_string($term));
return $result;
}
}
// dal.class.php
class DAL extends pdo {
public function __construct($cfg_file = 'sl.config') {
parent::__construct($this->dsn, $this->user, $this->pass);
}
public function getStoresBySearch($term)
{
$term = $term.'%';
$sql = "SELECT bla bla bla";
$sth = parent::prepare($sql);
$sth->setFetchMode(PDO::FETCH_ASSOC);
$sth->execute(array(':term'=>$term));
$result = $sth->fetchAll();
return $result;
}
}
Ho un messaggio che potrebbe non essere il modo migliore per codificare?