Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

estructura proyecto mvc

Estas en el tema de estructura proyecto mvc en el foro de Frameworks y PHP orientado a objetos en Foros del Web. hola, se que la forma de organizar un proyecto puede depender bastante de la costumbre de cada persona y en si de como se organice ...
  #1 (permalink)  
Antiguo 19/02/2007, 21:56
 
Fecha de Ingreso: julio-2004
Ubicación: Quito
Mensajes: 123
Antigüedad: 19 años, 9 meses
Puntos: 0
estructura proyecto mvc

hola, se que la forma de organizar un proyecto puede depender bastante de la costumbre de cada persona y en si de como se organice cada quien, sin embargo ahora me gustaria me den sus opiniones en cuanto a la estructura de un proyecto tomando en cuenta que se lo desarrollara en mvc.

Actualmente lo tengo algo asi:

Código:
nombre_aplicacion/
application/
empresa/
Controller
Model
Util
View
paquetes_terceros/
includes/
javascript/
Unas explicaciones, en Util pongo cosas como una clase Router, clase de Registo (patron Registry)
En paquetes_terceros pongo por ejemplo el smarty y podria ser en otro directorio adodb al mismo nivel
En includes coloco rutinas de inicializacion y funciones generales

Ahora por ejemplo no se donde poner clases que implementan los patrones: Decorator, Strategy, Facade, Factory, e incluso si creo una de configuracion con Singleton me confunde en que capa deberia ir, o mejor dicho cual seria el directorio mas adecuado, incluso para la clase principal de un objeto.

Espero sus comentarios

Saludos.
__________________
Guia Telefonica
ecuadorMusical.com
  #2 (permalink)  
Antiguo 20/02/2007, 08:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: estructura proyecto mvc

Que tal netoec84:

Los patrones de diseño van en tu capa de logica, ya que son "patrones" es decir, es tu responsabilidad como programador analizar cada patron e implementarlo en tus clases de logica, no deben de ir en si en un directorio especifico, deben de estar super bien implementados en cada una de tus clases de logica que ocupan tus controladores.

Saludos.
  #3 (permalink)  
Antiguo 20/02/2007, 11:29
 
Fecha de Ingreso: julio-2004
Ubicación: Quito
Mensajes: 123
Antigüedad: 19 años, 9 meses
Puntos: 0
Re: estructura proyecto mvc

gracias por la respuesta.... y que opinas sobre en ves de estructurar los directorios por capas de la aplicacion hacerlo por funcionalidad??? por que en este caso si quiero reutilizar algo tendria que copiarme el controlador, el modelo, la vista de cada directorio, que tal si me se lo agrupa mejor por "entidades" o "funcionalidad" digamos Usuarios, Empleados, Autenticacion o cosas asi??

Como separarias las siguientes clases?
Código PHP:
<?php
/********************************************************************
Model-View-Controller implementation according to POSA
(Pattern-Oriented Software Architecture
http://www.hillside.net/patterns/books/Siemens/book.html)
********************************************************************/

class HelloWorldController
{
    private 
$model;

    function 
__construct($model)
    {
        
$this->model $model;
    }
    
    function 
handleEvent($args)
    {
        
$this->model->setStrategy($args[2]);
        
$this->model->addText($args[1]);
    }
}


class 
HelloWorldModel
{
    private 
$text;
    private 
$observers = array();
    private 
$strategy;

    function 
attach($observer)
    {
        
$this->observers[] = $observer;
    }

    function 
getData()
    {
        
$facade = new HelloWorldFacade($this->strategy);
        return 
$facade->getHelloWorld().$this->text."\n";
    }
    
    function 
addText($text='')
    {
        
$this->text $text;
        
$this->notify();
    }
    
    function 
setStrategy($strategy)
    {
        
$this->strategy $strategy;
    }
    
    function 
notify()
    {
        foreach (
$this->observers as $observer)
        {
            
$observer->update();
        }
    }
}

class 
HelloWorldView
{
    private 
$model;

    function 
initialize($model)
    {
        
$this->model $model;
        
$model->attach($this);
        return 
$this->makeController();
    }
    
    function 
makeController()
    {
        return new 
HelloWorldController($this->model);
    }
    
    function 
update() 
    {
        
$this->display();
    }
    
    function 
display() 
    {
        echo 
$this->model->getData();
    }
}

/*********************************************************************
"Business logic"
********************************************************************/
class HelloWorld 
{
    function 
execute() {
        return 
"Hello world";
    }
}

class 
HelloWorldDecorator
{
    private 
$helloworld;
    
    function 
__construct($helloworld
    {
        
$this->helloworld $helloworld;
    }
    
    function 
execute() 
    {
        return 
$this->helloworld->execute();
    }
}

abstract class 
HelloWorldEmphasisStrategy 
{
    abstract function 
emphasize($string);
}


class 
HelloWorldBangEmphasisStrategy extends HelloWorldEmphasisStrategy 
{
    function 
emphasize($string
    {
        return 
$string."!";
    }
}

class 
HelloWorldRepetitionEmphasisStrategy extends HelloWorldEmphasisStrategy 
{
    function 
emphasize($string
    {
        return 
$string." and ".$string." again";
    }
}

class 
HelloWorldEmphasizer extends HelloWorldDecorator 
{
    private 
$strategy;
    
    function 
HelloWorldEmphasizer($helloworld,$strategy
    {
        
$this->strategy $strategy;
        
parent::__construct($helloworld);
    }
    
    function 
execute() 
    {
        
$string parent::execute();
        return 
$this->strategy->emphasize($string);
    }
}

class 
HelloWorldStrategyFactory 
{
    static function 
make($type
    {
        if (
$type == 'repetition')
            return 
self::makeRepetitionStrategy();
        return 
self::makeBangStrategy();
    }
    
    static function 
makeBangStrategy() 
    {
        return new 
HelloWorldBangEmphasisStrategy;
    }
    
    static function 
makeRepetitionStrategy() 
    {
        return new 
HelloWorldRepetitionEmphasisStrategy;
    }
    
}


class 
HelloWorldFormatter extends HelloWorldDecorator 
{
    function 
execute() 
    {
        
$string parent::execute();
        return 
$string."\n";
    }
}

class 
HelloWorldFacade 
{
    private 
$strategy;
    
    function 
__construct($strategyType
    {
        
$this->strategy HelloWorldStrategyFactory::make
        
($strategyType);
    }
    
    function 
getHelloWorld() 
    {
        
$formatter = new HelloWorldFormatter(
        new 
HelloWorldEmphasizer(
        new 
HelloWorld,$this->strategy));
        return 
$formatter->execute();
    }
}

$model = new HelloWorldModel;
$view = new HelloWorldView;
$controller $view->initialize($model);
$controller->handleEvent($_SERVER['argv']);
?>
__________________
Guia Telefonica
ecuadorMusical.com

Última edición por netoec84; 20/02/2007 a las 11:51
  #4 (permalink)  
Antiguo 20/02/2007, 13:44
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: estructura proyecto mvc

En este caso todo despues de "Business Logic" es tu capa de logica, debe de ir en tu directorio de logica, ahi puede ser separado en n capas como tu lo requieras.

Se que luego repito mucho y digo de mi framework pero, creo yo es una forma muy eficiente de almacenar las cosas.

Dentro de la carpeta "com/application/" puedes guardar toda la informacion en subcarpetas y despues podrias implementarla algo asi:
Código PHP:
import"com.application.*" );
import"com.application.decorators.*" );
import"com.application.strategies.*" );
import"com.application.factory.HelloWorldStrategyFactory" );


$model = new HelloWorldModel;
$view = new HelloWorldView;
$controller $view->initialize($model);
$controller->handleEvent($_SERVER['argv']); 
  #5 (permalink)  
Antiguo 20/02/2007, 16:10
 
Fecha de Ingreso: julio-2004
Ubicación: Quito
Mensajes: 123
Antigüedad: 19 años, 9 meses
Puntos: 0
Re: estructura proyecto mvc

gracias por la respuesta... me ha servido
__________________
Guia Telefonica
ecuadorMusical.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:38.