Ver Mensaje Individual
  #8 (permalink)  
Antiguo 17/01/2009, 11:28
Avatar de javico40
javico40
 
Fecha de Ingreso: agosto-2008
Ubicación: Evergreen Terrace 123
Mensajes: 288
Antigüedad: 15 años, 8 meses
Puntos: 9
Sonrisa Respuesta: estructura de sitio web usando MVC en PHP

Hola acholaco, pues la estructuracion es la que te dije, te dare un ejemplo con la que uso yo, para mis folders uso el nombre del sistema + la palabra componente + mas el tipo de componente:

-> Sys.com.vista
-> Sys.com.controller
-> Sys.com.model

la palabra componente la uso porque se refiere a que esa parte del sistema pertenece al nucleo de la aplicacion.
tambien añado ciertos folders como :

-> Sys.libs
-> Sys.include

Sys.libs es para libreria desarrolladas por otros usadas por tu sistema, como curvicorners o otra libreria que utilices, en include habran archivos que obligatoriamente es nesesario incluir en tu main, ejemplo: confi.php.
Con el uso de clases yo solo incluyo un archivo a todo el sistema, main.php, que esta en el root del sistema:

root -> main.php ->Sys.com.vista
->Sys.com.cotroller
->Sys.com.model
->Sys.libs
->Sys.include

El poder de usar la programacion orientada a objetos radica en conocer lo que ella te permite hacer, como la abstraccion, la sobrecarga, la reescritura, la herencia, la serializacion, y muchas otras cosas que hacemos con orientado a objetos.
BREVE EXPLICACION SOBRE POO

hay mucha diferencia en trabajar con funciones, te explicare rapidamente algunos conceptos para que veas su poder, digamos que estamos haciendo un sistema para un zoologico, todos los animales comen?, si pero de diferente manera, y diferente comida, entonces tenemos que todos los animales comen, en base a esto definimos una clase abstracta, esta clase no podra ser instanciada, es decir no podremos crear objetos animal, pero si podremos heredar de ella su comportamiento:

Código:
<?
abstract Class Animales {

 // atributo

private $comida; 

// metodo abstracto lo debes llamar por herencia
// los metodos abstractos no tiene cuerpo {} solo son definiciones 

public abstract function nombre_metodo(); 

}
?>
la clase animales define un comportamiento, a los metodos los llamamos comportamientos no funciones asi usen la palabra reservada function, pues demarcan como se comporta la clase mediante mensajes, ahora digamos que debemos alimentar las aguilas, el codigo seria el siguiente:

Código:
<?
// esta clase debe implementar todos los metodos de la clase abstracta 
Class Aguila extends Animales{

// ahora puedes definir como deben comer para aguilas

public abstract function nombre_metodo(){
tu codigo aqui
} 
}
?>
ahora tenemos la clase leon

Código:
<?
Class Leon extends Animales{

// ahora puedes definir como deben comer los leones

public abstract function nombre_metodo(){
tu codigo aqui
}
}

?>
las clases abstractas nos permiten definir comportamientos comunes a varias clases, de esta manera podemos usar el encapsulamiento, escondiendo mucho de nuestro codigo y aumentando el nivel de seguridad del sistema, muy distinto a si definieramos en cada archivo las funciones comer claseficadas de manera desordenada, saber que afecta que, seria mas dificil saber que afecta que al momento de un error, esto en grandes sistemas es fatal.
Digamos que aguilas define un comportamiento adicional llamado volar.

Código:
<?PHP

// esta clase debe implementar todos los metodos de la clase abstracta 
Class Aguila extends Animales{

// ahora puedes definir como deben comer para aguilas
// metodo heredado de la clase abstracta
public  function nombre_metodo(){
tu codigo aqui

public function volar(){
echo "volando";
}

?>
ahora una clase aguila calva que hereda de aguila, pero esta aguila calva es silvestre y vuela solamente, como aguila calva hereda de una clase no abstracta ella puede desidir que implementar

Código:
<?PHP
Class Aguila_ Calva extends Aguila{

/*este metodo tiene el mismo nombre, sin embargo añade una nueva funcionalidad y recibe un parametro adicional, estamos frente al polimorfismo, un metodo del mismo nombre pero mas especializado, la POO permite reutilizar el codigo, algo que no es facil con la estructurada, uno de los princiops de la POO es la reutilizacion del codigo.
*/

public function volar($direccion){
echo "volando a ". $direccion;
}

}

?>
Solo son dos ejemplso pequeños de lo que puedes hacer, programar en POO te dara una herramienta poderosa de diseño de software, la mayoria del sofwtare profesional esta diseñado en POO porque este permite reutilizar el codigo, encontrar errores facilmente, y definir nuestro sistema de manera mas clara.

Como te dije antes gracias a los conceptos de herencia, polimorfismo, encapsulamiento, abstraccion, etcetera, yo solo tengo un include en todo mi sistema, main.php, pero uso require no include, algo que he aprendido de reingenieria de sistemas php gnu, trata de buscar tutoriales en ingles y traducelos con la herramienta de traduccion de google (si no sabes ingles), en español encontraras poco sobre esto ya que no mucha gente es experta en el area en especial en php, en java encontraras mucho material.

"Con respecto a esto que dijiste:"

//recuerda que los formularios usando post no nesesariamente se ejecutan en el formulario en el que esta el codigo, podemos usar el paso por parametro a nuestro controlador, digamos que ese formulario esta en index.php, cuando el usuario oprima el boton enviar las acciones de procesamiento se ejecutaran en controller.php, el recibira las variables y las procesara.

<form action: controller.php method: post>
controller.php dara acceso a la clase index.php a el modelo.


// luego el controlador hara el llamado a los metodos que nesesita para validar estos datos

en controller.php

Código:
if($_POST[send]){
$nombre = $_POST[cli_name];

Cliente $cli = new Cliente();
$valide = $cli->validateCli($nombre);
if($valide!=null){
redirecciono a thanks.php
}else{
return $validate;
}
}
el modelo contiene la clase cliente y el metodo de validacion, el reenviara un retorno al controlador afimando si el usuario es valido o ya esta registrado, el recibira esa informacion en $validate y si validate tiene algo la reenviara a la vista la cual usando algo parecido define si hay algo y lo muestra, puedes poner la redireccion tambien en la vista, solo recuerda algo:

Código:
echo "<strong>Palabra en negrta</strong>"; //forma errones
<strong>
<?PHP
echo "Palabra en negrita"; // forma correcta
?>
</strong>
Para lo que quieres hacer para base de datos es ideal hacerlo con POO, en tu modelo puedes definir algo como:

Código:
private conexiones = array();
esto te permitira crear multiples conexiones a base de datos, con el uso de poo vas a ver mucha flexibilidad en tu programacion, espero que te haya sido de ayuda, cualquier duda no dudes en preguntar.