Facebook Twitter RSS Reset

Ejemplo básico con Java en 3 capas

Con la programación de software por capas buscamos separar el código o lógica que hace tareas de negocios (facturar, ventas) de la lógica de presentación gráfica y de datos.

La ventaja de este estilo es la facilidad de reutilización y mantenimiento, ya que en caso de algún cambio, solo se modifica la capa necesaria sin tener que revisar todo el código.

Identificando las capas

  • Capa de presentación(Interfaz de Usuario)

La funcionalidad y responsabilidad de esta capa es interactuar directamente con el usuario, para mostrar los datos y recoger estos. Esta capa no tiene conexión a base de datos, ni realiza operaciones de ningún tipo, sólo muestra datos en pantalla. Obtiene su información mediante funciones que se ejecutan en la capa de la lógica de negocio.

  • Capa de negocio



Aquí es donde se encuentran las clases que contienen funciones o procedimientos que serán invocados a través de la interfaz gráfica.

Recibe peticiones o eventos del usuario, procesa esas peticiones y luego envía la respuesta a la interfaz gráfica. Si es necesario esta capa se comunicará con la capa de datos, pero la capa de negocios no se conecta a la base de datos, solo recibe datos o los procesa. Aquí se ejecutan e invocan reglas o funciones de negocios por ejemplo, facturar, listar productos, etc.

  • Capa de datos



La responsabilidad de esta capa es la de consultar y regresar los datos desde una fuente de datos ya sea una Base de Datos, un archivo XML o de texto u otra fuente.

Si se usa una base de datos, aquí ejecutaremos consultas sql de forma que ninguna de las otras capas saben donde está la base de datos, así la capa de presentación podría estar en un pc y las otras capas en un servidor.

  • Capa de Entidades(capa extra de uso común)



En esta capa se almacenan las clases que representan a nuestros objetos de la realidad, estas clases nos servirán también para comunicarnos entre capas.

El esquema es algo así:

Ejemplo básico con Java en 3 capas

***DESCANSO VISUAL***

Ejemplo básico con Java en 3 capas

Ejemplo básico con Java en 3 capasGIF

Ejemplo básico con Java en 3 capasGIF

Ejemplo básico con Java en 3 capasGIF

Ejemplo básico con Java en 3 capasGIF

***AHORA SI, VAMOS AL EJEMPLO***

Ejemplo básico con Java en 3 capasGIF

Vamos a hacer un Alta-Baja y búsqueda por DNI de Personas en una lista.

Los datos de las personas son: DNI, apellido y nombre.

Para el Alta debemos ingresar los datos de la persona y presionar Guardar.

Para la Baja debemos ingresar el DNI y presionar Borrar. Si el DNI existe, la persona será eliminada de la lista

Para Buscar debemos ingresar un DNI, al presionar Buscar se deberán cargar los demás datos de la persona si la misma existe.

Capa de Entidades

En esta capa estará la clase Persona

package entidades;

public class Persona {

int dni;

String nombre;

String apellido;

public int getDni() {

return dni;

}

public void setDni(int dni) {

this.dni = dni ;

}

public String getNombre() {

return nombre ;

}

public void setNombre(String nombre) {

this.nombre = nombre;

}

public String getApellido() {

return apellido;

}

public void setApellido(String apellido) {

this.apellido = apellido;

}

}

Capa de Datos

Acá está la clase DatosPersona, que es la que mantiene un listado de personas y se encarga de agregarlas/quitarlas del mismo.

package datos;

import java.util.ArrayList;

import entidades.Persona;//se importa la clase Persona para poder utilizarla por su nombre

public class DatosPersona {

private static ArrayList personas; //lista de personas

public DatosPersona(){

personas = new ArrayList();

}

//Agrega una persona a la lista

public void agregar(Persona p){

personas.add(p);

}

//Elimina una persona de la lista

public void borrar(Persona p){

personas.remove(this.obtenerXDni(p.getDni()));

}

//Busca una persona por el DNI

public Persona obtenerXDni(int dni){

for (Persona persona : personas) {

if (persona.getDni()==dni){

return persona;

}

}

return null;

}

}

Capa de Negocio

Acá va la clase ControladorApp, en el ejemplo esta clase funciona como “intermediaria” entre la Interfaz de usuario y la clase de la capa de datos.

package negocio;

import datos.DatosPersona;//se importan las clases DatosPersona y Persona

import entidades.Persona;

public class ControladorApp {

private DatosPersona datosPersona;

public ControladorApp(){

datosPersona = new DatosPersona();//la variable datosPersona es la que permite la comunicación con la capa de datos

}

//le pide a la capa de datos que guarde una persona

public void guardar(Persona p){

datosPersona.agregar(p);

}

//le pide a la capa de datos que elimine una persona

public void eliminar(Persona p){

datosPersona.borrar(p);

}

//le pide a la capa de datos que busque a una persona por DNI

public Persona getByDni(int dni){

return datosPersona.obtenerXDni(dni);

}

Capa de Presentación

Acá va la interfaz de usuario, clase ABPersona


package presentacion;

import java.awt.EventQueue;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import javax.swing.JLabel;

import javax.swing.JTextField;

import javax.swing.JButton;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import javax.swing.JOptionPane;

import entidades.Persona;

import negocio.ControladorApp;

public class ABPersona extends JFrame {

    private JPanel contentPane;

    private JTextField textFieldDNI;

    private JTextField textFieldApellido;

    private JTextField textFieldNombre;

    private ControladorApp ctrlApp = new ControladorApp();//enlace con la capa de negocio

    /**

     * Launch the application.

     */

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {

            public void run() {

                try {

                    ABPersona frame = new ABPersona();

                    frame.setVisible(true);

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

        });

    }

    /**

     * Se crea la ventana.

     */

    public ABPersona() {

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        setBounds(100, 100, 426, 342);

        contentPane = new JPanel();

        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));

        setContentPane(contentPane);

        contentPane.setLayout(null);

        

        JLabel labelDni = new JLabel("DNI");

        labelDni.setBounds(65, 39, 70, 15);

        contentPane.add(labelDni);

        

        JLabel lblApellido = new JLabel("Apellido");

        lblApellido.setBounds(65, 76, 70, 15);

        contentPane.add(lblApellido);

        

        JLabel lblNombre = new JLabel("Nombre");

        lblNombre.setBounds(65, 116, 70, 15);

        contentPane.add(lblNombre);

        

        textFieldDNI = new JTextField();

        textFieldDNI.setBounds(201, 37, 167, 19);

        contentPane.add(textFieldDNI);

        textFieldDNI.setColumns(10);

        

        textFieldApellido = new JTextField();

        textFieldApellido.setBounds(201, 74, 167, 19);

        contentPane.add(textFieldApellido);

        textFieldApellido.setColumns(10);

        

        textFieldNombre = new JTextField();

        textFieldNombre.setBounds(201, 114, 167, 19);

        contentPane.add(textFieldNombre);

        textFieldNombre.setColumns(10);

        

        //código del botón guardar

        JButton btnGuardar = new JButton("Guardar");

        btnGuardar.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                                     guardar()

            }

        });

        btnGuardar.setBounds(34, 278, 117, 25);

        contentPane.add(btnGuardar);

        //código del botón borrar        

        JButton btnBorrar = new JButton("Borrar");

        btnBorrar.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent arg0) {

                                   borrar();

            }

        });

        btnBorrar.setBounds(163, 278, 117, 25);

        contentPane.add(btnBorrar);

        

        //código del botón buscar

        JButton btnBuscar = new JButton("Buscar");

        btnBuscar.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                                   buscar();

            }

        });

        btnBuscar.setBounds(293, 278, 117, 25);

        contentPane.add(btnBuscar);

    }

        //fin del frame

    //captura los datos ingresados en las cajas de texto y los asigna a una persona

    protected Persona obtenerDatos(){

        Persona p = new Persona();

        p.setDni(Integer.parseInt(textFieldDNI.getText()));

        p.setNombre(textFieldNombre.getText());

        p.setApellido(textFieldApellido.getText());

        return p;

    }

    

    

    //obtiene datos de una persona y los imprime en las cajas de texto respectivas

    protected void insertarDatos(Persona p){

        textFieldDNI.setText(String.valueOf(p.getDni()));

        textFieldNombre.setText(p.getNombre());

        textFieldApellido.setText(p.getApellido());

    }

    

    //le pide a la capa de negocio que elimine una persona

    protected void borrar() {

        ctrlApp.eliminar(this.obtenerDatos());

    }

    

    //le pide a la capa de negocio que guarde una persona

    protected void guardar() {

        ctrlApp.guardar(this.obtenerDatos());

    }

    

    //le pide a la capa de negocio que busque a una persona por DNI

    protected void buscar() {

        Persona p = ctrlApp.getByDni(Integer.parseInt(textFieldDNI.getText()));

        if (p==null){

            JOptionPane.showMessageDialog(null, "No se encontro el DNI", "Error al       buscar", JOptionPane.INFORMATION_MESSAGE);

        } else {

            this.insertarDatos(p);

        }

    }

} // Fin de la clase

La ventana es algo asi:

Ejemplo básico con Java en 3 capas

La idea es que al completar los datos y presionando Guardar, se agregará una persona a la variable personas de la clase de la capa de datos.

Al presionar Borrar (habiendo ingresado un DNI), se eliminará de la variable personas de la clase de la capa de datos la persona que tenga ese DNI.

Al presionar Buscar (habiendo ingresado un DNI), se buscará la persona que tenga ese DNI, y en caso de que exista se imprimirán los datos en los campos de texto correspondientes, y si el DNI no existe se mostrará un mensaje.

Ejemplo básico con Java en 3 capas
  • El ejemplo es MUY BASICO, no hay ningún tipo de validación de datos, por ej, el campo DNI debería ser numérico y no puede estar vacío, si se ingresa un DNI que ya existe pero con otros datos, se agregará igual a la lista y habrá dos personas con el mismo DNI

  • En este ejemplo la capa de Datos funciona en memoria, pero puede reemplazarse (gracias al trabajo en capas) por una capa de datos en base de datos(sería material para otro post Ejemplo básico con Java en 3 capasEjemplo básico con Java en 3 capas ). Las demás capas serán las mismas.

  • A la capa de presentación la tuve que escribir así porque sino era ilegible

ESO ES TODO AMIGOS!

eh amigo, no tendrás unos bitcoins para la birr…

Ejemplo básico con Java en 3 capas

No comments yet.

Leave a Comment