
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....



 
 
 
