Pregunta

Parece que ahora mismo estoy envuelto en un debate con otro programador de este proyecto que piensa que las vistas no tienen mérito.Propone un sistema PHP que se parece a esto:

$draw = new Draw;
$nav = $draw->wideHeaderBox().
$draw->left().
    $draw->image().
        Image::get($image,60,array('id'=>'header_image')).
    $draw->imageEnd().
$draw->leftEnd().
$draw->left(10).
    '<div id="header_text">'.
        self::defaultSectionText().
    '</div>'.
$draw->leftEnd().

y así sucesivamente (esto está en el controlador por cierto).Ahora bien, sus argumentos a favor de esto realmente tienen cierto sentido, afirma que si hay un rediseño, todo lo que tenemos que hacer es cambiar el HTML en un lugar y cambiará en todas partes automáticamente.Sin embargo, por alguna razón, este método todavía me molesta. ¿Hay algún mérito en las opiniones sobre este método?Me refiero a además de no tener que volver a escribir HTML a mano.

¿Fue útil?

Solución

Los ahorros de tiempo en HTML son útiles, pero sólo lo son cuando son intuitivos y fáciles de entender.Tener que instanciar un new Draw simplemente no suena muy natural.Además, wideHeaderBox y left sólo tendrá significado para alguien que conozca íntimamente el sistema.¿Y si hay es ¿Un rediseño, como reflexiona tu compañero de trabajo?¿Qué pasa si el wideHeaderBox se vuelve muy estrecho?¿Cambiará el marcado (y los estilos, presumiblemente) generados por el método PHP pero dejará un nombre de método muy inexacto para llamar al código?

Si ustedes simplemente tener Para usar la generación de HTML, debes usarlo intercalado en los archivos de vista, y debes usarlo donde sea realmente necesario/útil, como algo como esto:

HTML::link("Wikipedia", "http://en.wikipedia.org");
HTML::bulleted_list(array(
    HTML::list_item("Dogs"),
    HTML::list_item("Cats"),
    HTML::list_item("Armadillos")
));

En el ejemplo anterior, los nombres de los métodos en realidad tienen sentido para las personas que no están familiarizadas con su sistema.También tendrán más sentido para ustedes cuando regresen a un archivo rara vez visitado y se pregunten qué diablos estaban haciendo.

Otros consejos

El argumento que utiliza es el argumento que necesitas tener puntos de vista.Ambos resultan en cambiarlo solo en un lugar.Sin embargo, en su versión, está mezclando el marcado de vista con el código comercial.

Sugeriría utilizar más un diseño con plantilla.Realice toda su lógica de negocios en PHP, configure todas las variables que necesita su página.Luego, simplemente haga que el marcado de su página haga referencia a esas variables (y no trate con ninguna lógica empresarial).

¿Has mirado a Smarty? http://smarty.php.net

He hecho algo así en el pasado y fue una pérdida de tiempo.Por ejemplo, básicamente tienes que escribir contenedores para todo lo que ya puedes hacer con HTML y olvidarás algunas cosas.Cuando necesites cambiar algo en el diseño, pensarás "Disparo, lo olvidé... ahora tengo que codificar otro método o agregar otro parámetro".

En última instancia, tendrá una gran colección de funciones/clases que generan HTML que nadie sabrá ni recordará cómo usar dentro de meses.Los nuevos desarrolladores te maldecirán por usar este sistema, ya que tendrán que aprenderlo antes de cambiar algo.Por el contrario, probablemente haya más personas que conozcan HTML que tus clases de dibujo HTML abstracto... ¡y a veces simplemente tienes que ensuciarte las manos con HTML puro!

Para ser honesto, parece bastante detallado y difícil de seguir, y parte del código parece ser en gran medida información de diseño.

Siempre intentamos separar la lógica de la salida tanto como sea posible.Sin embargo, a menudo ocurre que la vista y los datos están estrechamente vinculados y ambas partes dictan cómo debe ser la otra (por ejemplo, en un sitio de comercio electrónico simple, puede decidir que desea comenzar a mostrar los niveles de existencias al lado de cada producto). , lo que obviamente implicaría cambiar la vista para agregar html apropiado para esto y la lógica de negocios para calcular un valor para las acciones).

Si la idea de mantener 2 archivos para hacer esto es demasiado difícil de manejar, intente dividir las cosas en una parte de "Recopilación de datos" y una parte de "Vista de visualización", obteniendo la mayoría de los beneficios sin aumentar la cantidad de archivos que necesita administrar. .

Siempre me resulta mucho más fácil trabajar directamente con html.Hay una capa de abstracción menos (html -> página web real/función php -> html -> página web real) con la que lidiar y luego solo trabajas en HTML.

Realmente creo que eso de "solo hay que cambiarlo en un solo lugar" no funcionará en este caso.Esto se debe a que habrá muchas ocasiones en las que querrás cambiar la salida de una función, pero solo en un solo lugar.Seguro que puedes usar argumentos, pero pronto terminarás con algunas funciones que tienen como una docena de argumentos.Qué asco.

Tenga en cuenta que los lenguajes/sistemas de plantillas a menudo le permiten incluir subplantillas, lo que le permite tener algunos bloques de HTML reutilizables.

La conclusión es que si acabara de empezar en su empresa y hubiera visto un código como ese en todas partes, mi primer pensamiento sería: '¡Maldita sea!Necesito un nuevo trabajo otra vez.

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