Cuando usar MVC

11

Estoy construyendo un sitio con PHP y un servidor MySQL. Pero, actualmente no estoy usando ningún tipo de marco. ¿Debo estar usando Model View Controller?

Ryan
fuente
3
No necesariamente necesita usar un marco para usar el patrón de diseño MVC. Puede estructurar su propio código para usar MVC.
Amy Anuszewski
55
¿Está preguntando si debería usar un marco o si debería usar el enfoque MVC en general?
Adam Lear

Respuestas:

11

Mi regla de oro:

cualquier página que llegue a una base de datos o requiera cualquier forma de entrada del usuario será más fácil de administrar con una estructura MVC.

No necesariamente necesita ir con un marco completo, si el sitio es bastante simple, puede usar una clase de Controlador de Página simple para cada página que lo requiera ( ver arriba ). Esta no es una solución escalable, así que tenga en cuenta los objetivos a largo plazo del proyecto.

Aquí hay un bosquejo de una configuración de PageController (rápidamente pirateada):

index.php
--------------------------------------------------------

include 'Controller.php';
include 'Db.php';//db connection
include 'View.php';
$Controller = new MyController(new Db(), new View());
$Controller->route($_GET);
$Controller->render();


Controller.php
--------------------------------------------------------
class Controller($db){

    /* ensure all collaborators are provided */
    public function __construct(Db $db, View $view){
         $this->db = $db;
         $this->db->connect(array('host','db','user','pass'));
         $this->view = $view;
    }

    /* load the appropriate model data */
    public function route($_GET){
        //load the right model data and template
        switch($_GET){
            case $_GET['articles'] === 'cats':
                $this->vars = $this->db->get('cats');
                $this->template = 'cats.php';
                break;
            case $_GET['articles'] === 'dogs':
                break;
                $this->vars = $this->db->get('dogs');
                $this->template = 'dogs.php';
            default:
             $this->vars = array();
        }

    } 

    /* render an html string */
    public function render(){
        echo $this->view->render($this->template,$this->vars);
    }

}

View.php
------------------------------------------------------------
class View.php
    {
     /* return a string of html */
     public function render($template,$vars){
            // this will work - but you could easily swap out this hack for 
            // a more fully featured View class
            $this->vars = $vars;
            ob_start();
            include $template;
            $html = ob_get_clean();
            return $html;
         }

     }

template cats.php
--------------------------------------------------------
$html = '';
$row_template = '%name%,%breed%,%color%';
foreach($this->vars as $row){
    $html .= str_replace(
        array(%name%,%breed%,%color%),
        array($row['name'],$row['breed'],$row['color']),
        $row_template);
    }
echo $html;

Db.php
---------------------------------------------------------------
I haven't bothered writing a db class... you could just use PDO
sunwukung
fuente
3

Diría que sería bueno si existe la posibilidad de que el sitio crezca más allá de un tamaño no trivial. La razón principal es que obtiene una mejor capacidad para cambiar y mantener el sitio en el futuro y el mantenimiento es la mayor parte del trabajo en la mayoría de los proyectos. Le brinda una buena separación de preocupaciones, organización del sitio y ayuda a evitar códigos repetitivos y desordenados.

MVC es un patrón bien conocido y aceptado para los sitios web y que ayudará si lleva a otras personas al proyecto. Con ese fin, es probable que desee elegir un marco establecido para comenzar.

Llavero
fuente
1

No proporcionó ningún detalle que pudiera ayudar a responder la pregunta, pero mi recomendación predeterminada en ese caso es "sí, use un marco MVC". Elija una solución personalizada solo cuando esté realmente seguro de que la necesita.

Adam Byrtek
fuente
1

Como arquitectura, MVC se enfoca en dividir su proyecto / página web en múltiples partes. Esto puede facilitarle la vida cuando tenga que cambiar algo en el código o la interfaz de usuario.

Como regla general, si espera cambios en las especificaciones de su proyecto, especialmente cuando esos cambios afectan a todo el código, vaya con la arquitectura que lo obliga a dividir el código en pequeñas piezas de lego.

Thanos Papathanasiou
fuente
1

No en este punto. Espere hasta que su sitio se haga más grande y desordenado. Te preguntarás: ¿qué puedo hacer para que las cosas sean menos complicadas? Leerás un artículo sobre MVC y te encantará. Ya no se preguntará si usarlo o no. Lo sabrás. Ese sería el momento de comenzar a usarlo.

Emanuil Rusev
fuente