Ejemplo de 3 capas con java

Iniciado por Rijhording, 25 Abril 2010, 08:21 AM

0 Miembros y 1 Visitante están viendo este tema.

Rijhording

Buenas Comunidad, quisiera saber si alguien conoce algun ejemplo de un proyecto diseñado en 3 capas con el lenguaje java, ya que estoy por iniciarme en esto y no se como esta el asunto, ya se lo que es 3 capas pero no me vendria mal un ejemplo basico. Gracias por su ayuda!!

sapito169

#1
Yo trabajo con tres capas y pienso que no puedes haber preguntado nada mejor las tres capas son excelentes te ayudan a crear aplicación muy profesional siguiendo todas las cosas buenas que debe tener un buen software reutilización escalabilidad desacoplamiento y lo mas importante a lo que veo muy pocos que hacen es no mesclar la lógica de usuario con  la lógica de la aplicación

Con eso te olvidas del maldito código autogenerado con sus horribles 100 líneas que solo sirven para poner el layaut incrustado con la lógica de la aplicación si quieres cambiar de vista sin usar 3 capas tendrías que cambiarlo todo en cambio si usas 3 capas solo cambias la vista

Las 3 capas no es un patrón de diseño debido a que no resuelve un problema estándar si no que te dice de forma estricta como modelar toda la aplicación

Si trabajas con 3 capas + inyección de dependencias + interfaces y clases abstractas te va a quedar un sistema digno de un ingeniero


sapito169

#2
Las 3 capas sirven para proyectos muy grandes que quieran perdurar por los siglos de los siglos si no es así mejor trabaja solo en 2 capas

Lamentablemente no es perfecta y e notado cosas muy feas acerca de las 3 capas

Aumenta la cantidad de código enormemente lo que no significa que el código este desordenado al contrario se pone muy desacoplado

Vuelve demasiado lento al principio como siempre hacer algo estricto y muy elaborado (una arquitectura) siempre es lento al principio pero al muy largo plazo devuelve el costo con intereses

No tiene muy buena integración con ides espeto netbenas (cada capa seria un modulo)

No tiene una capa que yo la llamaría de especificación o común en la cual iría todos las clases e interfaces que son comunes en todas las capas

Rijhording

pero yo solamente busco un ejemplo para guiarme como debe ser leerme el codigo para entendermelo por mi mismo e buscado en san google y no hay buenos ejemplos si alguien tuviera un ejemplo en java usando 3 capas..gracias y saludos

sapito169

#4
Si sigo con el ejemplo lo voy a terminar en casi hora y media para la tarde ya va estar posteado

-yo trabajo con una variación de 3 capas en realidad trabajo con 4 capas con una cuarta que seria la capa común en donde están dos paquetes el paquetes de entidades o (objetos de negocio) y el paquete de interfaces(esas interfaces que son comunes en tre las capas)

Este post es el que mas te va a gustar voy a explicar como se implementa en java 3 capas en un sentido más técnico y en el idioma de un programador casi nadie lo ase así suelen ser demasiado teóricos y no dan un ejemplo concreto
El ejemplo es el mas sencillo que se me pueda ocurrir va a ser un sistema para un restaurante que funciona bajo una misma pc sin nada espectacular (inyección de dependencias, clases abstractas) si el ejemplo no va con lo que necesitas puedes avisarme para acomodarlo a tu caso

- las capas por recomendación serian paquetes en netbenas además serian modulos

-para la capa común iría  en com.PollitosPeru.sistemaVenta.comun

-en la capa de datos irían clases que se conecten con la fuente de base de datos siendo el caso mas común conectarse con una base de datos relacional con jdbc o alguna especificación de jpa yo hago el ejemplo con jdbc siendo el nombre del paquete com.PollitosPeru.sistemaVenta.datos además una clase que represente mi conexión en particular ConexionPollito importara a  com.PollitosPeru.sistemaVenta.comun

-en la capa de lógica de negocio estar en el paquete com.PollitosPeru.sistemaVenta.logica aca pondré mi lógica de negocio y solo lógica por ningún motivo importara del paquete javax.swing o alguna librería grafica
con excepción de que llame a las clases que representen modelos como javax.swing.table.AbstractableModel o javax.swing.TableModel solo hará importaciones a la capa de datos y a la capa común no habrá sin ninguna excepción importaciones al paquete java.sql o javax.sql o alguno que se equivalente

-en la capa de vista hira dentro del paquete com.PollitosPeru.sistemaVenta.vista aqui abra las todos los formularios las clases que sean hijos nietos o vistnientos de Componet si es formulario comenzar con Frm como FrmLoguin FrmCaja y si es panel comenzara con Pan como PanCabeseraCaja PanDetalleCaja aca también pondrás las clases que hagan gráficos estadísticos o impriman reportes

sapito169

#5
Código (java) [Seleccionar]

package com.pollitosperu.sistemaVentas.comun.Entidades;

/**
*
* @author luis
*/
public class Producto {
   private int codigo;
   private String nombre;
   private int cantidad;
   private String descripcion;

   public int getCodigo() {
       return codigo;
   }

   public void setCodigo(int codigo) {
       this.codigo = codigo;
   }


   public String getNombre() {
       return nombre;
   }

   public void setNombre(String nombre) {
       this.nombre = nombre;
   }

   public int getCantidad() {
       return cantidad;
   }

   public void setCantidad(int cantidad) {
       this.cantidad = cantidad;
   }

   public String getDescripcion() {
       return descripcion;
   }

   public void setDescripcion(String descripcion) {
       this.descripcion = descripcion;
   }
}



Código (java) [Seleccionar]

package com.pollitosperu.sistemaVentas.comun.Interfases;

import com.pollitosperu.sistemaVentas.comun.Entidades.Producto;
import java.util.ArrayList;

public interface IdaoProducto {

   public void agreagProducto(Producto producto);

   public void eliminaProducto(int codigo);

   public void modificaProducto(int codigo, Producto producto);

   public ArrayList<Producto> listaProductos();
}

sapito169

Código (java) [Seleccionar]

package com.pollitosperu.sistemaVentas.datos;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author luis
*/
public class ConexionPollito {

    private Connection conection = null;

    public Connection getConection() {
        if (conection == null) {
            try {
                Driver driver = new com.mysql.jdbc.Driver();
                DriverManager.registerDriver(driver);
                conection = DriverManager.getConnection("jdbc:mysql://localhost:3306/pollitosperu", "root", "root");
            } catch (SQLException ex) {
                ex.printStackTrace();
                Logger.getLogger(ConexionPollito.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return conection;
    }
}


Código (java) [Seleccionar]

package com.pollitosperu.sistemaVentas.datos;

import com.pollitosperu.sistemaVentas.comun.Entidades.Interfases.IdaoProducto;
import com.pollitosperu.sistemaVentas.comun.Entidades.Producto;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
*
* @author luis
*/
public class DBdaoProducto implements IdaoProducto {

    private Connection connection = new ConexionPollito().getConection();

    public void agreagProducto(Producto producto) {
        try {
            CallableStatement statement = connection.prepareCall("{call agreagaProducto (?,?,?)}");
            statement.setString("nombre", producto.getNombre());
            statement.setInt("cantidad", producto.getCantidad());
            statement.setString("descripcion", producto.getNombre());
            statement.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

    }

    public void eliminaProducto(int codigo) {
        try {
            CallableStatement statement = connection.prepareCall("{call eliminaProducto (?)}");
            statement.setInt("cod", codigo);
            statement.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

    }

    public void modificaProducto(int codigo, Producto producto) {
        try {
            CallableStatement statement = connection.prepareCall("{call modificaProducto (?,?,?,?)}");
            statement.setInt("cod", codigo);
            statement.setString("nom", producto.getNombre());
            statement.setInt("cant", producto.getCantidad());
            statement.setString("descrip", producto.getNombre());
            statement.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    public ArrayList<Producto> listaProductos() {
        ArrayList<Producto> productos = new ArrayList<Producto>();
        try {
            CallableStatement statement = connection.prepareCall("{call listaProductos }");
            ResultSet resultSet = statement.executeQuery();
            while (resultSet.next()) {
                Producto producto = new Producto();
                producto.setNombre(resultSet.getString("nombre"));
                producto.setCodigo(resultSet.getInt("codigo"));
                producto.setCantidad(resultSet.getInt("cantidad"));
                producto.setDescripcion(resultSet.getString("descripcion"));
                productos.add(producto);
            }
            return productos;
        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        }
    }
}

sapito169

#7
Código (java) [Seleccionar]

package com.pollitosperu.sistemaVentas.logica;

import com.pollitosperu.sistemaVentas.comun.Entidades.Interfases.IdaoProducto;
import com.pollitosperu.sistemaVentas.comun.Entidades.Producto;
import com.pollitosperu.sistemaVentas.datos.DBdaoProducto;
import java.util.ArrayList;

/**
*
* @author luis
*/
public class DaoProducto implements IdaoProducto {

   private DBdaoProducto daoProducto = new DBdaoProducto();

   public DaoProducto() {
   }

   
   public void agreagProducto(Producto producto) {
       daoProducto.agreagProducto(producto);
   }

   public void eliminaProducto(int codigo) {
       daoProducto.eliminaProducto(codigo);
   }

   public void modificaProducto(int codigo, Producto producto) {
       daoProducto.modificaProducto(codigo, producto);
   }

   public ArrayList<Producto> listaProductos() {
       return daoProducto.listaProductos();
   }
}


Código (java) [Seleccionar]
package com.pollitosperu.sistemaVentas.vista;

import com.pollitosperu.sistemaVentas.comun.Entidades.Producto;
import com.pollitosperu.sistemaVentas.logica.DaoProducto;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.DefaultListModel;


/**
*
* @author luis
*/
public class FrmProducto extends javax.swing.JFrame {

......

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        

       DaoProducto daoProducto = new DaoProducto();
       Producto producto = new Producto();
       producto.setNombre(txtnombre.getText());
       producto.setDescripcion(txtDescripcion.getText());
       producto.setCantidad(Integer.parseInt(txtCantidad.getText()));
       daoProducto.agreagProducto(producto);
   }

 private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                        
       DaoProducto daoProducto = new DaoProducto();
       daoProducto.eliminaProducto(1);
   }  

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                        
       DaoProducto daoProducto = new DaoProducto();
       ArrayList<Producto> productos = daoProducto.listaProductos();
       Iterator iterator = productos.iterator();
       DefaultListModel defaultListModel = new DefaultListModel();
       jList1.setModel(defaultListModel);
        defaultListModel.clear();
       while (iterator.hasNext()) {
           Producto producto = new Producto();
           producto = (Producto) iterator.next();
           defaultListModel.addElement(producto.getNombre());
       }

   }


private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                        
       DaoProducto daoProducto = new DaoProducto();
       Producto producto = new Producto();
       producto.setNombre(txtnombre.getText());
       producto.setDescripcion(txtDescripcion.getText());
       producto.setCantidad(Integer.parseInt(txtCantidad.getText()));
       daoProducto.modificaProducto(Integer.parseInt(txtcodigo.getText()), producto);
   }    

}fin de clase





sapito169

preguntas traumas maleteos y amenasas hacer el post correspondiente   :xD

Rijhording

me gustaria ver tus interfaces de usuario para guiarme ps xq el resto esta comprensible ok man gracias saludos..