Hola a todos realmente, mas o menos programo en objetos en aspx pero ahora el trabajo me ha llevado a php por que el hosting es mas economico y con 1000 dolares al año obtienes mas en un hostin linux que uno windows ,pero no entrare a discusion solo es un comentario jeje
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....