Primera part del curs Curs BBDD i Java on analitzem les diferents formes d’emmagatzemar dades i com fer-les disponible per als programes que desenvolupem amb llenguatges d’alt nivell.

Tipus de bases de dades

Existeixen diversos tipus de base de dades actualment, cadascun d’ells orientats a optimitzar l’accés a la informació quan la informació pren formes concretes:

  • BD relacionals: Taula (Relació) + Unió (PK - FK)
  • BD orientades a objecte: Magatzem d’objectes
  • BD natives XML: Documents i dades estructurades (documents XML)

Cadascun d’ells presenta beneficis particulars.

Per la forma de les dades i l’estructura interna de l’emmagatzematge de la informació, cadascuna d’aquestes modalitats de base de dades presentarà formes específiques d’accés a la informació:

  • BD relacionals: Connexió per a l’extracció de files i manipulació de dades (execució SQL: SELECT i sentències DML)
  • BD relacionals: Mapatge objecte-relacional (1 registre <-> 1 objecte)
  • BD orientades a objecte: Manipulació directa d’objectes (1 registre = 1 objecte)
  • BD natives XML: Parsers (anàlisi sintàctic del document XML: DOM)
  • BD natives XML: Bindings (1 document XML <-> estructura enllaçada d’objectes)
  • BD natives XML: Accés a través de API (execució de consultes XPath/XQuery)

Durant el curs anirem veient la majoria d’aquestes tècniques.

En la majoria de casos, l’objectiu final és treballar sobre objectes de tipus POJO (Plain Old Java Object), que seran els elements que s’omplen i utilitzen com a magatzem temporal de la informació que la nostra aplicació enviarà i/o gestionarà.

En aquest sentit, un bon disseny de les aplicacions força l’ús de tècniques de disseny del software com:

  • MVC (Model-View-Controller): L’aplicació es divideix en tres parts:
    • Model: Aquí es tracta l’emmagatzematge de la informació. En aquest nivell implementarem les tècniques que veurem en el present curs (pensem en registres de taules). Pren la forma d’una col·lecció de funcions estil inserir_missatge(...), obtenir_missatge_per_id(...), eliminar_missatge(...), etc.
    • View: Serà la tècnica emprada per mostrar formularis i/o informes a l’usuari, i serà aquí on l’usuari iniciarà processos sobre la informació (pensem en un HTML). Normalment seran plantilles o codi generat a través d’algun sistema modern de generació de vistes.
    • Controller: Aquest nivell implementarà la gestió de la informació i la vinculació cap a les vistes que s’hauran de presentar a l’usuari. És la part més important de l’aplicació, perquè aquí és on es prenen decisions. Pren la forma d’una col·lecció de funcions que responen a les accions dels usuaris i tot un seguit de if i crides a funcions que seran invocats en conseqüència.
  • Multi-tier (n-capes): L’aplicació es divideix en una quantitat indeterminada de capes o nivells (tiers). El model mínim incorporarà 3 capes:
    • Capa de dades (Data-tier): Gestiona l’accés a la informació. Equival al Model de MVC.
    • Capa de negoci (Business-tier): Gestiona quines accions s’han d’efectuar sobre les dades en funció de les accions dels usuaris. Equival (amb matissos) al Controller de MVC.
    • Capa de presentació (Presentation-tier): Genera les vistes que seran ofertes als usuaris en resposta de les seves accions. Equval al View de MVC.

Les principals diferències entre MVC i Multi-tier són:

  • En MVC no és obligatori passar per la capa “Controller”, mentre que en Multi-tier, l’estructura és canònica.
  • En Multi-tier es pot ampliar la quantitat de capes o nivells afegint-ne segons convingui. Per exemple, es podria afegir una capa d’encriptació i una altra d’enviament entre la de negoci i presentació per fer que l’aplicació tingui la part de presentació executada en un equip remot.

Sigui com sigui, tant en MVC com en Multi-tier, la capa de gestió de dades pren la forma de col·lecció de funcions que manipulen dades i típicament treballen amb objectes POJO com el següent:

 1 package com.flx.curset.intro.model;
 2 
 3 public class Employee {
 4   int id;
 5   String firstname;
 6   String lastname;
 7   ...
 8   
 9   public Employee(int id, String firstname, String lastname, ...) {
10     this.id = id;
11     this.firstname = firstname;
12     this.lastname = lastname;
13     ...
14   }
15 
16   public int getId() { return id; }
17   public String getFirstname() { return firstname; }
18   public String getLastname() { return lastname; }
19   ...
20 
21   public void setId(int id) { this.id = id; }
22   public void setFirstname(String firstname) { this.firstname = firstname; }
23   public void setLastname(String lastname) { this.lastname = lastname; }
24   ...
25 }

Tot POJO ha de complir els següents requeriments:

  • Representa un objecte útil de dades completament definit i auto-tancat.
  • Presenta uns atributs privats que donen valor a l’objecte.
  • Presenta mètodes setter i getter per tal de manipular i obtenir la informació de l’objecte.

És recomanable treballar amb paquets per separar de manera adient els objectes de la capa de dades (model de dades) de la resta de l’aplicació. Observi’s el package de l’exemple POJO mostrat.

Els diferents models d’accés a dades (BDR, BDOR, BDO, XND, …) permetran l’extracció, inserció i modificació de dades a través d’una col·lecció d’objectes POJO adient.