Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/02/2007, 11:29
netoec84
 
Fecha de Ingreso: julio-2004
Ubicación: Quito
Mensajes: 123
Antigüedad: 19 años, 10 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