Date post: | 17-Nov-2015 |
Category: |
Documents |
Upload: | mario-nava |
View: | 17 times |
Download: | 4 times |
Arquitectura y Estndares de Programacin
1
ARQUITECTURA Y ESTANDARES DE
PROGRAMACION
Arquitectura y Estndares de Programacin
2
1. INTRODUCCION
El presente documento muestra el esquema tecnolgico que se llevar a cabo para el
desarrollo de sistemas Java dentro de la fbrica y adems los estndares de programacin
que deben de utilizar.
2. FRAMEWORKS PERMITIDOS
Los frameworks permitidos para el desarrollo de nuevos sistemas son:
Para la capa core:
Hibernate
JPA
Hibernate + JPA
Spring JDBC
Para la capa Web
Jquery
Primefaces
ZK
El mecanismo de compilacin que se usar ser Maven, excepto que el cliente solicite usar
Ant, para poder integrar los proyectos con un repositorio y poder centralizar las mtricas de
calidad de cdigo.
3. LINEA BASE
En esta seccin se presenta la arquitectura base definida para la implementacin de la
solucin y el detalle de los componentes que conforman cada uno de las capas de la
arquitectura, los mismos que son explicados a continuacin:
Capa de Presentacin
En esta etapa de la arquitectura se encuentran los componentes y/o aplicaciones
consumidoras de los diferentes servicios de la organizacin.
Capa Servicio
En esta etapa de la arquitectura se encuentran los componentes de servicio de la
solucin, y que tienen las operaciones de negocio organizacionales expuestas para ser
consumidas por un tercero.
Capa Core
Arquitectura y Estndares de Programacin
3
En esta etapa se encuentra las clases que interactan directamente con la base de datos
y tendr incluido la lgica de negocio.
Capa Datos
En esta capa se encuentran las diferentes fuentes de datos: bases de datos, aplicaciones
legacys, archivos de datos, etc.
Grafico 1: Diagrama que muestra las instancias de los componentes
Donde:
NombreProyecto:
Capa Servicios NombreProyectoWs
Capa Presentacin
NombreProyectoTipPre
Capa Core
NombreProyectoCore
BD
CAPA DE DATOS
Arquitectura y Estndares de Programacin
4
Representa el nombre del proyecto que vamos a trabajar, por ejemplo Vacaciones,
SGA, etc.
TipPre:
Representa el tipo de presentaciones que vamos a usar y los tipos permitidos son:
o Web
o Movil
Por ejemplo, para un proyecto que se llame SGA y tenga que crear un proyecto web, el nombre de
los componentes seran los siguientes.
Grafico 2: Ejemplo de diagrama que muestra las instancias de los componentes
CAPA SERVICIOS SgaWs
CAPA PRESENTACION
CAPA CORE
CAPA DE DATOS
SgaWeb
SgaCore
SGA
Arquitectura y Estndares de Programacin
5
4. PAQUETE DE DISEO ARQUITECTONICO
En esta seccin se detallan los componentes de cada paquete del sistema y su relacin a un
nivel general, el cual est conformado por una capa de presentacin representada por la
Web Content, una capa de control (Action), una capa de negocio (negocio), una capa de
persistencia (entidad) y de acceso a datos (DAO), donde hay que tener en cuenta que el
dominio de los componentes est compuesto por el dominio del cliente.
Grafico 3: Diagrama de paquetes del componente de Aplicacin.
Arquitectura y Estndares de Programacin
6
Arquitectura y Estndares de Programacin
7
Cada componente ser explicado a continuacin:
Capa Presentacin
Capa de presentacin del componente representada con el WebContent o contenido web
y que estar compuesta por paquetes referenciad a los mdulos correspondientes.
Capa Control
Capa de control o de agente del sistema, encargada de la redireccin y de asignacin de
solicitudes y respuestas de operaciones, as como de la atencin de los eventos de los
componentes de presentacin.
Capa Ws
Capa en la cual expone servicios web que ser consumido por terceros.
Capa Servicio
Capa en la cual se realizan operaciones o transacciones de servicio.
Capa Negocio
Capa en la cual se realizan las operaciones o transacciones de negocio.
Capa de Acceso a Datos
Es la capa que realiza sobre la base de datos.
5. IMPLEMENTACION DE LA ARQUITECTURA DE LA SOLUCION
Para explicacin de la implementacin se usara el diagrama de clases, debido a que es el
principal diagrama para el anlisis y diseo. En este diagrama se presentan las clases del
sistema con sus relaciones estructurales y de herencia.
Grafico 4: Diagrama de la base (web) de un mdulo.
Arquitectura y Estndares de Programacin
8
Grafico 5: Diagrama de la clase base (core) de un mdulo.
Para la explicacin de la comunicacin de los diferentes componentes de la arquitectura
solucin, usaremos el diagrama de secuencia.
Grafico 6: Diagrama de secuencia de un mdulo.
Arquitectura y Estndares de Programacin
9
6. NOMENCLATURAS DE CLASES
CAPA DE PRESENTACION
Capa de presentacin del componente representada con el WebContent o contenido Web
y que se estar compuesta por paquetes referenciado al mdulo correspondiente.
Nomenclatura:
Para las interfaces Web: xxxxYyyy.jsf xxxxYyyy.xhtml
Para los vean: XxxxYyyyBean.java
CAPA CONTROL
Capa de control o de agente del sistema, encargada de la redireccin y asignacin de
solicitudes y respuestas de operaciones, as como de la atencin de los eventos de los
componentes de presentacin.
Nomenclatura:
Para las clases de control: XxxxYyyyController.java
CAPA DE SERVICIO
Capa en la cual se realizan las operaciones o transacciones de negocio.
Nomenclatura:
Para la interface de Servicio XxxxYyyyService.java
Para la implementacin del service XxxxYyyyServiceImpl.java
Nomenclatura de mtodos:
El nombre de los mtodos para el CRUD, ser:
o Insertar
o Eliminar
o Actualizar
o Obtener
o Listar
CAPA DE NEGOCIO
Arquitectura y Estndares de Programacin
10
Capa en la cual se realizan las operaciones o transacciones de negocio.
Nomenclatura:
Para la interface de negocio: XxxxYyyyBusiness.java
Para la implementacin de negocio: XxxxYyyyBusinessImpl.java
Nomenclatura de mtodos:
El nombre de los mtodos para el CRUD ser:
o Insertar
o Eliminar
o Actualizar
o Obtener
o Listar
CAPA DE ACCESO A DATOS
Es la capa que realiza operaciones sobre la base de datos. Si es necesario se pueden crear
interfaces dentro del mismo paquete.
Nomenclatura:
Para la interface DAO: XxxxYyyyDao.java
Para la implementacin DAO: XxxxYyyyDaoImpl.java
Si los nombres de las clases o interfaces estn conformados por varias palabras, entonces
la primera letra de cada palabra debe ser en mayscula, y se debe considerar como mximo
10 palabras para el nombre de las clases e interfaces.
Nomenclatura de mtodos:
El nombre de los mtodos para el CRUD ser:
o Insertar
o Eliminar
o Actualizar
o Obtener
o Listar
CAPA DE PERSISTENCIA
Es la capa que realiza el mapeo objeto-relacional de la aplicacin y la base de datos.
Arquitectura y Estndares de Programacin
11
Nomenclatura
Para la clase de persistencia: XxxxYyyy.java
Para las DTO: XxxxYyyyDto.java
Para los Bean: XxxxYyyyBean.java
Si los nombres de las clases o interfaces estn conformados por varias palabras, entonces
la primera letra de cada palabra debe ser en maysculas, y debe considerar como mximo
10 palabras para el nombre de las clases e interfaces.
CAPA DE WS
Es la capa que realiza la exposicin de servicios web.
Para la interface de Servicio Web: XxxxYyyyWs.java
Para el WSDL del Servicio Web: XxxxYyyyWs.wsdl
7. ESTANDARES DE CODIFICACION
Tome en consideracin las siguientes recomendaciones cuando empiece a disear y
construir una aplicacin y crear soluciones mas robustas.
Program for People, not the machine (javaCodingStandards, www.ambySoft.com), El
objetivo principal de t desarrollo debera ser que t cdigo sea fcil de entender por
otras personas. Si no pueden entenderlo, entonces no sirve.
Disea primero, luego codifica.
Desarrolla en pequeos pasos.
Trabaja junto con tus usuarios. Es simple, T no puedes desarrollar un sistema excelente
si t no conoces ni entiendes las necesidades de los usuarios.
Trata de mantener una codificacin simple, tal vez la codificacin compleja te satisfaga,
pero si nadie la entiende, no sirve de mucho.
Aprende patrones comunes, antipatrones e idiomas.
DE LA DEFINICION DE VARIABLES
Las variables deben ser definidas siempre con la primera letra en minsculas, y las
constantes se deben definir completamente en maysculas, separando cada palabra por un
guion bajo y utilizando static final para su definicin.
private static final String ESPACIO_KEYS = "Keys.WS.Param";
public static final int TREE = 1;
Arquitectura y Estndares de Programacin
12
Una declaracin por lnea es recomendada en razn del mejor entendimiento. Documente
cada variable local con un comentario al final de la lnea, utilice // para escribir una breve
explicacin del uso que se le dar.
Para definir un objeto Collection o elementos que hereden de esta clase, defnalos con una
palabra en plural representado los tipos de objeto almacenados en el Collection. Para definir
cualquier otro objeto que no sea Collection, escrbalo en singular.
No escriba diferentes tipos sobre la misma lnea.
Trate de inicializar las variables locales donde son declaradas. La nica razn para no hacerlo
es cuando dependen de algn clculo. Utilice variables locales para una sola, las variables
multipropsito causan confusin. Ponga las declaraciones al comienzo de los bloques (los
que estn entre llaves {}). El crear variables en cualquier logar causa confusin.
La nica excepcin es para los ndices delos bucles, que normalmente son declarados en la
misma sentencia.
Para la definicin de variables de bucles puedes utilizar las letras i,j,k, etc., es un estndar
ampliamente utilizado. Evite las declaraciones que escondan niveles superiores.
int level; // indentation level
int size; // size of table
List codigos;
String[] rucs;
List codigos;
String[] rucs;
void myMethod() {
int int1 = 0; // inicio del bloque del metodo
if (condition) {
int int2 = 0; // inicio del bloque del "if"...
}
}
Int maxLoops=size();
for (int i = 0; i < maxLoops; i++) { ... }
Arquitectura y Estndares de Programacin
13
La sentencia if-else if else-if debe seguir la siguiente forma:
PRACTICAS DE PROGRAMACION
No cree variables de clase o de instancia pblicas sin alguna buena razn.
Evite utilizar un objeto para acceder a variables o mtodos de clase estticos (static).
Utilice el nombre de la clase en su lugar.
Las constantes numricas no deberan de ser codificadas directamente, excepto para -
1, 0 o 1, que pueden aparecer en una sentencia FOR como valores para el contador.
Evite asignar varias variables al mismo momento en una sola sentencia. Es difcil leer.
Es generalmente una buena idea utilizar el parntesis libremente en expresiones que
involucran muchos operadores para evitar problemas de precedencia. Aun as el
operador de precedencia es obvio, puede no serlo para otra persona.
int count;
...
myMethod() {
if (condition) {
int count; // Evitar!
...
}
...
}
if ( condition) {
statements;
}
if ( condition) {
statements;
} else {
statements;
}
if ( condition) {
statements;
} else if ( condition) {
statements;
} else {
statements;
}
classMethod(); //OK
AClass.classMethod(); //OK
anObject.classMethod(); //Evitar!
fooBar.fChar = barFoo.lchar = 'c'; // Evitar!
Arquitectura y Estndares de Programacin
14
En lo posible no utilice el + para concatenar variables, en su lugar use la clase
StringBuffer.
IMPORTANTE: Al utilizar el signo + crea una gran cantidad de cadenas en memoria
innecesariamente, lo que consume adems de la memoria el tiempo del garbage collect en
limpiarlas.
DEFINICION DE POOLS Y DATASOURCES A LA BASE DE DATOS
Pool de escritura
Pgxxbbddagru
Donde:
pg: Pool de consulta/escritura.
bbdd: nombre de base de datos.
agru: nombre de agrupacin de aplicaciones o cdigo de dependencia. Es opcional.
Pool de Lectura
Pcxxbbddagru
Donde:
pc: pool de consulta
bbdd: nombre de base de datos
agru: nombre de agrupacin de aplicaciones o cdigo de dependencia. Es opcional
Datasources
Dzxxbbddagru
Donde:
d: Data Source
z: Indica el tipo de operacin
g: Consulta y/o
c: Consulta
x: uso de driver XA
s: No aplica
bbdd: Indica el nombre de la base de datos
if (a == b && c == d) // Evitar!
if ((a == b) && (c == d)) // USE
String s = "Este es " + "un mensaje " + " a " + nombre
+ ", muchos saludos"; NO!!
Strins s = new StringBuffer("Este es un mensaje a
").append(nombre)
.append(", muchos saludos").toString();
Arquitectura y Estndares de Programacin
15
agru: indica el nombre de agrupacin de aplicaciones o cdigo de dependencia. Es
opcional.
JNDI
jjjj/dzbbddagru
Donde:
jjjj: Indica los sgtes. Valores:
jdbc: para Weblogic o WAS.
Java: para Jboss.
d: Data Source
z: Indica
g: Consulta y/o
c: Consulta
x: uso de driver XA
s: No aplica
bbdd: Indica nomenclatura de la Base de Datos.
agru: Indica nombre de agrupacin de aplicaciones.