Buscar
Social
Ofertas laborales ES
« Diario de un principiante (Capítulo 2) | Main | Uso de las interfaces de Java »
martes
may152001

Propuesta de convencrión de nombres para J2EE

Guía de estilo de programación


Propuesta de convención de Nombres para JSP y Servlets




Esto pretende ser una guía de estilo de programación. Si se considera algún cambio, adición,... será consultado al analista, que será quien decida si se acepta o no el cambio. El analista deberá informar de cualquier cambio a los programadores, además , debe consultar con ellos antes de hacerlo. (Se centraliza el proceso y se evita la anarquía).



Lenguaje : JAVA
Tecnologías : JSP, Servlets, ...


Notación:




Notación húngara. Recordar: en una variable se añade como prefijo una abreviatura del tipo.



String sUsuario
Array de String asUsuario[10]
ResultSet rsConsulta
HttpServletRequest hsrq


Si la clase es un nombre muy largo, podemos, en casos obvios y puntuales (p.e. que en la página sólo pueda haber una variable de este tipo) usar la abreviatura.



Los nombres de atributos, compuestos o no, tendrán en mayúscula la primera letra de cada palabra que lo forma



HttpServletRequest.
String


Los nombres de métodos serán en minúsculas. Si se les añade un nombre o adjetivo, irá en mayúsculas la primera.



ejecuta();
compraComida();



  • Un Servlet empieza con mayúscula y acaba con la palabra S. P.e. MiServletS
  • Un Bean sin estado acaba con SL (stateless bean)
  • Un Bean con estado acaba con SF (stateful bean)
  • Un Bean de sesión acaba con EB (entity bean)
  • Salvo excepciones, en el servidor de servlets, se usará el mismo nombre lógico que el real.



Enlaces a URLS, BBDD, etc...:




Siempre que sea posible declararemos las constantes, cuando tengamos que hacer referencia a una URL, cuando usamos un usuario / clave continuamente, etc... Las constantes las declaramos como generales (y no en el método que las referencia). Ejemplo:



En lugar de :



conML=DriverManager.getConnection("jdbc:mysql://raffaella/dietas","alfonso","miclave");


Pondremos:



conML=DriverManager.getConnection(BASE_DATOS,USUARIO,CLAVE);


Y declararemos las constantes, BASE_DATOS, USUARIO, CLAVE como atributos privados del servlet.



Declaración de variables y constantes:



Si la palabra es compuesta, en las constantes las separamos con subrayado.



Tipo1 CONSTANTE= valor,
t1Variable1=new Tipo1(),
t1Variable2=new Tipo1(valor),
. . .
Tipo2 CONSTANTE2 = valor2,
CONSTANTEN = valor3,
t2VarDos =new Tipo2(),
t2VarDosDosDos = new Tipo2();


Observar que las variables y constantes van agrupadas por tipo. Otra opción, que puede dar más legibilidad, es declarar PRIMERO las constantes, agrupadas por tipo, y luego las variables, agrupadas también por tipo. Si se hace así, se agruparán en el mismo orden de tipo y se usará el mismo método para todo el proceso. Nunca cambiar el estilo de una página a otra en el mismo proyecto.



Tipo1 CONSTANTE= valor,
CONSTANTE2=valork;

Tipo2 CONSTANTE3 = valor3,
CONSTANTEN = valorn;
. . .
Tipo1 t1Variable1=new Tipo1(),
t1Variable2=new Tipo1(valor);

Tipo2 t2VarDos =new Tipo2(),
t2VarDosDosDos = new Tipo2();
. . .


Es decir, para un proceso dado o agrupamos en orden de



[Tipo , (Constantes y Variables)]


ó en el orden



[(Constantes, Tipo) y (Variables,Tipo)].


Las constantes siempre en mayúsculas.



Se indicará para qué se usa cada variable con un comentario en la línea anterior a dicha declaración. Cualquier comentario que se haga será en línea a parte, nunca a la derecha de la línea de código.



Por supuesto que cada sentencia irá en su propia línea. Cuidado con la programación ofuscada (anidamiento de sentencias), si se presta a confusión o la línea es grande, se divide, aunque ello suponga declarar variables.



Se declaran las variables al nivel que se van a usar, a saber: clase, método y bucle. En el caso de los métodos se declararán al principio, antes de cualquier línea de código. Si es necesario se pueden declarar en otro momento, pero sólo si es necesario. En todo caso dejar una línea entre sentencias de código y declaraciones de variables y declaraciones de constantes.



Tabular siempre que: se abra un paréntesis, después de una sentencia de control de flujo. Los
paréntesis se abren y cierran en la misma columna. Pero en líneas separadas a cualquier línea de código.



Ej:



for (iRecorreVector = 0; iRecorre < 10; iRecorre++)
{ // al mismo nivel que la línea anterior
// Comentario indicando lo que vamos a hacer.
línea 1 // un tabulado más
línea 2
. . .
línea n
}//for
// al mismo nivel que la apertura y con comentario.



Programación




Para formularios, servlets,... se usará siempre que sea posible el método post.. Si no es posible, el método get se redirecciona al método post y es en este en el que se implementa la lógica. Y si no es posible (¿?) pues me lo decís para que me ría J



Por defecto se trabajará a nivel de sesión así que todo pasa por aquí.



<%@ page session="true" import = "paquete.clase, paquete.paquete.clase,..." %>


En las jsp declarar todas las variables, iniciándolas, al principio. Antes de cualquier cosa (incluido el html).



<%! Tipo1 CONSTANTE= valor,
t1Variable1=new Tipo1(),
t1Variable2=new Tipo1(valor),
. . .
%>


Sólo se insertará código java en medio del BODY cuando sea extrictamente necesario.



De hecho se hará todo antes de la la marca <HTML>.



No se implementarán clases en la página. Para ello se usarán beans, eso sí, funciones y clases estándars no se implementarán en un bean para encapsular. (P.E. si se accede a una base de datos, no será correcto crear un bean, que acceda , pedirle luego al bean que acceda , recuperar de él lo que sea, ... cuando se puede hacer directamente la consulta).



Si existen trozos de páginas comunes a un proyecto, p.e. un menú , se crea una página .jsp aparte y se inserta la página. Se reduce así el mantenimiento de las páginas.



<@ include file ="menu.html" >


P.e. Podemos tener en una web en la que todas sus páginas tengan un menú común. Haremos entonces una página con el menú (incluso sus javascripts asociados):



<table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr>
<th bordercolor="#FFFFFF"><h4>Main menu:</h4></th>
<th><a href="/CustomerSearch.jsp">Customer Search</a></th>
<th><a href="/CustomerListS">Customers</a></th>
<th><a href="/CustomerForm.jsp">Current Customer</a></th>
<th><a href="/OutletList.jsp">Outlets</a></th>
<th><a href="/PizzaList.jsp">Pizzas</a></th>
</tr>
</table>


... y titularla (como menu.jsp). Luego en las jsp podemos poner el include.




Control de flujo




Si se abre un paréntesis, se añadirá un comentario al final.



if (soy_el_mejor)
dímelo
else
{
soy_el_mejor = verdadero;
dimelo;
}//else


Evitar la redundancia. En el ejemplo anterior dimelo TIENE que ir fuera de if .. else..



if ( ¡soy_el_mejor)
soy_el_mejor = verdadero
dimelo


Si hay un bucle, se comentará el motivo del bucle.



while ( no soy_guapo)
{
pedir(presupuesto); //obs. Esto es autocomentado
soy_guapo ßhacer_cirujia;
} //while
while ().
{
//dar vueltas hasta que sea guapo = añadimos esto
pedir(presupuesto);
soy_guapo ßhacer_cirujia;
si (soy_guapo)
break;
} //while



Añadir /Recuperar datos entre páginas/servlets.




Inicialmente usaremos sesiones. Para añadir un valor que sea necesario recuperar:



application.setAttribute("NombreParaRecuperar", VariableAGuardar);


Ej. application.setAttribute("usuario", sUsuario);



Para recuperarlo



application.getAttribute("NombreParaRecuperar");


Ej: application.getAttribute("usuario");



Nota importante: Estamos trabajando con la especificación 2.3 de servlets



Es importante añadir a la cabecera sólo los datos más importantes para seguir la situación. Es un compromiso del analista/programador decidir si un dato se recupera de un fichero, BDD o se añade en la cabecera. Pero debería ir indicado en el documento de lanálisis




Imprimir datos en la salida estándar (jsp’s)



Dos opciones:



<%=session.getAttribute("H") %>
<% out.print(H);%>


Salvo excepciones, prevalecerá siempre la primera. Ej de excepción:



<% out.print( "<input type=\"hidden\" name=\"MLoculto\" value=\""+ sML+"\" >");%>


Aquí que lo decida el programador y, si duda que lo comente.


















Alfonso María Vega Avelaira trabaja como desarrollador de Software Java en Vigo, España.

Cada vez que tiene un rato libre se tira al monte para escalar y dormir bajo un hotel de un millón de estrellas.





Para cualquier duda o tirón de orejas, e-mail a:
avega_ARROBA_arnal.es




Reader Comments

There are no comments for this journal entry. To create a new comment, use the form below.
Comentarios deshabilitados
Comentarios deshabilitados en esta noticia.