2008-09-01 21 views
5

Parece que ahora estoy enredado en un debate con otro programador de este proyecto que cree que las opiniones no tienen ningún mérito. Se propone un sistema que PHP es como la siguiente:Para usar vistas o no usar vistas

$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 es, en el controlador por cierto). Ahora que sus argumentos para esto realmente tienen algún sentido, él afirma que si hay un rediseño, todo lo que tenemos que hacer es cambiar el HTML en un lugar y cambia en todas partes automáticamente. Por alguna razón, sin embargo, este método todavía me frota de la manera incorrecta, ¿hay algún mérito para las vistas sobre este método? Quiero decir además de no tener que volver a escribir HTML a mano.

Respuesta

5

Los ahorradores de tiempo HTML son útiles, pero solo son útiles cuando son intuitivos y fáciles de entender. Tener que crear una instancia de new Draw simplemente no suena muy natural. Además, wideHeaderBox y left solo tendrán significado para alguien que conoce íntimamente el sistema. ¿Y si hay es un rediseño, como sus musas de compañero de trabajo? ¿Qué pasa si el wideHeaderBox se vuelve muy estrecho? ¿Cambiarás el marcado (y los estilos, presumible) generados por el método PHP, pero dejarás un nombre de método muy impreciso para llamar al código?

Si ustedes simplemente tenéis utilizar la generación de HTML, se debe utilizar intercalados en archivos de vista, y que se debe utilizar cuando sea realmente necesario/útil, como por ejemplo 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 realmente tienen sentido para las personas que no están familiarizadas con su sistema. También tendrán más sentido para ustedes, cuando vuelvan a un archivo poco visitado y se pregunten qué demonios estaban haciendo.

1

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

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

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

1

He hecho algo así en el pasado, y fue una pérdida de tiempo. Por ejemplo, básicamente tienes que escribir wrappers para todo lo que ya puedes con HTML y OLVIDARÁS algunas cosas. Cuando necesites cambiar algo en el diseño, pensarás "Dispara, me olvidé de eso ... 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á o recordará cómo usar en los próximos meses. Los nuevos desarrolladores lo maldecirán por usar este sistema, ya que tendrán que aprenderlo antes de cambiar cualquier cosa. Por el contrario, es probable que más personas conozcan HTML que tus clases abstractas de dibujo HTML ... ¡y algunas veces tienes que ensuciarte las manos con HTML puro!

1

Parece bastante prolijo y difícil de seguir para ser honesto y parte del código parece que se trata de información de diseño.

Siempre tratamos de dividir la lógica de la salida tanto como sea posible. Sin embargo, a menudo la vista y los datos están estrechamente relacionados con ambas partes dictando cómo debe ser el otro (por ejemplo, en un sitio simple de comercio electrónico, puede decidir si desea comenzar a mostrar los niveles de stock al lado de cada producto , lo que obviamente implicaría cambiar la vista para agregar html apropiado para esto, y la lógica de negocio para ir y calcular un valor para el stock).

Si la idea de mantener 2 archivos para hacer esto es demasiado difícil de manejar, intente dividir las partes en "Recopilar datos" y "Visualizar vista", obteniendo la mayoría de los beneficios sin aumentar la cantidad de archivos necesitas administrar

1

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) para tratar, entonces solo trabajas en HTML.

Realmente creo que la cosa 'solo tiene que cambiarlo en un solo lugar' no funcionará en este caso. Esto se debe a que lo harán tantas veces cuando desee cambiar la salida de una función, pero solo en un solo lugar. Claro que puedes usar argumentos, pero pronto terminarás con algunas funciones que tienen como una docena de argumentos. Yuck.

Tenga en cuenta que los lenguajes/sistemas de plantillas a menudo le permiten incluir subpáginas, lo que le permite tener algunos bloques reutilizables de html.

En resumen, si acabara de comenzar en su empresa y viera un código así en todas partes, mi primer pensamiento sería: '¡Maldición! Necesita un nuevo trabajo de nuevo.

Cuestiones relacionadas