Pregunta

Tengo un prototipo de sitio web escrito en PHP. Últimamente he reescrito el código para separar la lógica del diseño y las operaciones de la base de datos. Así que ahora tengo algo como el diseño de código MVC.

Ahora lo que me molesta es que en MVC tendré muchos archivos y cada uno mostrará algo cuando se combine con otro (modelo + vista + controlador). Entonces descubrí que sería útil crear algo así como widgets de mis partes MVC.

Por ejemplo, cuando tengo una vista de MVC de productos, creo un archivo PHP que combina archivos de pieza MVC de tal manera para mostrar productos basados ??en valores GET que paso a este nuevo archivo PHP.

Lo que lograría de esta manera es que cualquier widget, subparte del sitio web estaría disponible para verlo por separado y usarlo por separado de otras partes. Por lo tanto, sería algo así como widgets o como el diseño del navegador Firefox.

Por lo tanto, podría probar cada parte del sitio web por separado, y luego solo combinar estas partes en el diseño actual de la página web real. Por lo tanto, las pruebas de usuario también serían más fáciles, y los archivos de presentación serían muy cortos y fáciles de entender.

Me gustaría saber qué piensas al respecto. No quiero caer en ningún agujero en el diseño y creo que este es el momento que será importante en el futuro para mantener el código del sitio web fácil.

¿Estoy en lo correcto?

¿Fue útil?

Solución

  

MVC Tendré muchos archivos y cada uno mostrará algo cuando se combine con otro (modelo + vista + controlador)

Parece que no obtuvo el modelo MVC correcto. Solo las vistas tienen contenido o "muestran algo".

Basado en esto, puede crear acciones que solo crean una pequeña parte de contenido similar a un widget, que luego se puede combinar en su diseño.

Me gustaría recomendar leer el Inicio rápido Zend_Layout .

Otros consejos

La respuesta a su problema es ver composición .

Le sugiero que divida toda la pantalla en partes más pequeñas: barra superior, barra de navegación de segundo nivel, lista de productos, área de vista previa, etc. Estos pueden proporcionarse mediante vistas separadas, ayudantes de vista o métodos adicionales en su controlador. Luego, una acción del controlador compondría piezas en una sola pantalla usando un diseño HTML simplista.

Ej. para la barra superior que es estática, esta podría ser una vista especializada. Para la lista de productos que es dinámica, podría ser el método controlador getProductsList ($ categoryId) que proporciona una vista compleja. La vista previa del producto puede ser entregada por view helper. Vea el siguiente ejemplo:

// inside class ProductsController
public function index($categoryId, $productId = null) {

    // specialised view
    $topBar = new TopBarView();
    $topBar->selected = 'products';

    // helper method
    $list = $this->getProductsList($categoryId);

    // helper object
    $previewHelper = new PreviewHelper($productId);
    $preview = $previewHelper->getView();

    // view composition
    $view = new View('path/to/template.tpl');
    $view->add($topBar);
    $view->add($list);
    $view->add($preview);
    return $view;

}

Este es solo un ejemplo para ilustrar cómo funciona la composición.

El beneficio oculto de tener un método para entregar el widget (es decir, la lista de productos) es que podría reutilizarse para admitir Ajax. Cambiar la categoría requeriría una llamada Ajax al método getProductsList con un nuevo ID de categoría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top