Arquitectura y Estandares de Programacion

15
Arquitectura y Estándares de Programación 1 ARQUITECTURA Y ESTANDARES DE PROGRAMACION

description

Programación básica

Transcript of Arquitectura y Estandares de Programacion

  • 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.