Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/03/2009, 06:18
Avatar de enriqueplace
enriqueplace
 
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 19 años
Puntos: 32
Respuesta: Capas de diseño y de negocio con PHP

Estimado Salvador, bienvenido

El tema no es complejo, para PHP todo es más artesanal (comparando con Java) y la idea de aplicar las capas es relativamente simple:
  1. Crear 3 subdirectorios: interfaz, dominio y persistencia
  2. Para resolver el tema de las rutas relativas, el mejor camino es que cuentes con un archivo de configuración en la raíz de tu proyecto y posteriormente cada capa tenga un config.php que lo que hace es ir al nivel superior y así todas las clases del paquete deben incluirlo.
  3. Recomendado: usar un patrón Factory para concentrar las peticiones de cada capa.

Por ejemplo:

En tu raíz tienes: index.php y config.php con constantes que configuras con la información de tus directorios.

Código PHP:
<?php
error_reporting
(E_ALL E_STRICT);

/* RUTAS */
define('HOME''C:\xampp\htdocs');
define('APP_NAME''miaplicacion');
define('APP'HOME DIRECTORY_SEPARATOR APP_NAME );
define('LOG'APP DIRECTORY_SEPARATOR 'logs' );

/* 3 CAPAS */ 
define('PRE'APP DIRECTORY_SEPARATOR 'presentacion');
define('DOM'APP DIRECTORY_SEPARATOR 'dominio');
define('PER'APP DIRECTORY_SEPARATOR 'persistencia');
Posteriormente desde tu index incluyes el archivo de configuración y si quieres usar una clase de Presentación deberás hacer lo siguiente:

Código PHP:
<?php
require_once 'config.php';
require_once 
PRE DIRECTORY_SEPARATOR 'UsuarioPresentacion.php';

$usuario = new Usuario();

echo 
$usuario::getAll();
En e caso de los paquetes todos deberán incluir este config "falso":

Código PHP:
<?php require_once ("../config.php"?>
Y tus clases de presentación lo usarán de esta forma:

Código PHP:
<?php
require_once 'config.php';
require_once 
DOM DIRECTORY_SEPARATOR 'Usuario.php';

abstract class 
UsuarioPresentacion
{
 
/* código de la clase */
}
En este ejemplo incluyes el archivo de configuración genérico, dependiendo de donde esté haciendo la llamada, tu clase Usuario siempre encuentra el archivo de configuración (y no tienes que estar jugando con "..", ".", etc).

Aquí puedes observar que la clase UsuarioPresentación conoce y depende de la clase Usuario de la capa de dominio, y así la siguiente conocerá a Usuario de la capa de persistencia (ahí está la esencia de las 3 capas):

interfaz -> dominio -> persistencia

En resumen rápido, esta sería la forma de hacerlo "artesanalmente", otras opciones podrías optar por un MVC a través de un framework, pero ya no sería una arquitectura de 3 capas, sería otra solución un poco más especializada.

Busca en Google que encontrarás artículos al respecto.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com