hace algun tiempo programaba en capas en aspx y pues me gusto esto y he hice un diseño parecido en php para mis aplicaciones y consta de lo siguiente..
primero tengo mi selector de base de datos , donde defino mi base de datos que voy a ocupar, usuarios, passwords ... este lo pongo en un archivo llamado database.php
-----------------------------------------------------------------------
Código:
----------------------------------------------------------class DataBaseClass { var $database_name= 'base de datos; var $database_user= "usuario; var $database_pass= "password"; var $database_host= "localhost"; var $database_conexion; // funcion conectar function connect() { $this->database_conexion= mysql_connect($this->database_host, $this->database_user, $this->database_pass) or die("Could not make connection to MySQL"); mysql_select_db($this->database_name) or die ("Could not open database: ". $this->database_name); } //funcion desconetar function disconnect() { if(isset($this->database_conexion)) { mysql_close($this->database_conexion); } else { mysql_close(); } } //funcion para ejecutar un query de SELECT, cuando le mando $RowD=True // solo recojo un valor es es solo para obtener un valor function query($qry, $RowD=false) { if(!isset($this->database_conexion)) { $this->connect(); } $result = mysql_query($qry, $this->database_conexion) or die("Error: ". mysql_error()); if ($RowD==false) { $returnArray = array(); $i=0; while ($row = mysql_fetch_array($result, MYSQL_BOTH)) { if ($row) { $returnArray[$i++]=$row; } } } else { $returnArray=mysql_fetch_row($result); } mysql_free_result($result); return $returnArray; } //funcion para ejecutar cualquier Query, de preferencia Update, Insert, Delete function QueryExecute($qry) { if(!isset($this->database_conexion)) { $this->connect(); } $result = mysql_query($qry, $this->database_conexion) or die("Error: ". mysql_error()); return $result; } //funcion extra, para ejecutar numero de rows function NumRows($qry) { if(!isset($this->database_conexion)) { $this->connect(); } $result = mysql_query($qry, $this->database_conexion) or die("Error: ". mysql_error()); $Total = mysql_num_rows($result); return $Total; } }
ahora tengo 2 archivos mas..
archivo 2 llamado DAL.php el Cual tengo todos mis querys y hace funcion para mandar mi querys a la base de datos y conectarse con database.php por herencia
Código:
-----------------------------------------------------------------------------------archivo DAL.php include("database.php"); /** * Clase de la capa DAL para ejecutar consultas a la base de datos * archivo que incluyo database.php * **/ class ClaseDall extends DataBaseClass { /** * Constructor */ function __construct(){ } /** * Funciones privadas "" */ //----------------------------------------------------------- private function GetSomethinSelect() { $_sSQL ="SELECT * FROM tabla"; return $_sSQL; } // Funciones publicas // Aqui pongo todas mis funciones que requiero conectar con la base de datos public function GetSomething($id) { $sSQL.= $this->GetSomethinSelect(); $sSQL.=" WHERE IdField = ''$id " ; // aqui envio un select por eso ocupo query $Array = $this->query($sSQL); return $Array; } }
--------------------------------------------------------------------------------
Archivo 1 BLL.php .. Esta es mi capa logica donde hago todas las operaciones logicas y etc... su funcion es pasarle datos a DAll por herencia y hacer operaciones , aqui es donde se hace, todo el trabajo sucio de IF, whiles, sumas, restas
Código:
include("Dall.php"); class Clasebll extends ClaseDall { function __construct(){ } public function GetGiveSomething($id) { $value= $this->GetSomething($id); return $value; } }
y ya en mi interface osea en mi archivo.php, solo mando a llamar lo que obtuve de BLL
<?
include('lib/Bll.php')
$Classeinterface = new Clasebll();
//para obtener datos de BLL solo haces..
$id = 1;
$Arreglo = $Classeinterface ->GetGiveSomething($id)
foreach($Arreglo as $Row)
{
$Row['campo']
}
?>
-------------------------------------------
De esta manera he separado por capas mi desarrollo y ya cada capa es independiente una de la otra, en caso de que yo quiere hacer alguna operación solo voy a mi capa correspondiente y automáticamente los cambios se veran reflejados en todo.
criticas buenas y malas, sugerencias, como mejorar el código, aportes y la verdad trabajar de esta forma se me hace muy comodo ya que no ocupo el llamado MVC, y hago esto para hacer una programación mas accesible y usable ( jeje no solo lo aplico a la web) y he llegado a los mismos resultados con este modelo y es eficiente..
que dicen ustedes venga el debate....