Qual è il modo migliore per lavorare con DAL e BLL?

2

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?

    
posta Steven 25.03.2011 - 10:23
fonte

2 risposte

1

Dopo molte ricerche su google, penso di aver finalmente trovato la soluzione che stavo cercando. Utilizzerò Modello di progettazione dell'iniezione delle dipendenze

Ecco due link a una serie di esempi usando DI:
link

    
risposta data 29.03.2011 - 21:19
fonte
0

Il manuale della serie Head First su OOP dovrebbe aiutare; non è .NET. Il design sembra più una preoccupazione per te dell'implementazione del linguaggio.

Ecco come molti sviluppatori e alcuni progetti tendono ad avviarsi. Ti trovi in una posizione molto migliore per sederti e riorganizzare il tuo codice. La chiave è di non perdere la tua attuale funzionalità (supponendo che funzioni secondo i tuoi requisiti). Stai per scoprire perché molti preferiscono test delle unità.

    
risposta data 25.03.2011 - 12:31
fonte

Leggi altre domande sui tag