El Noguer

Joaquim Perez i Noguer

Consideracions sobre model Relacional Objecte

Filed under: Ciència i tecnologia — Joaquim Perez Noguer at 9:18 am on Dimecres, Juliol 31, 2019

Un problema que no se’n parla gaire és el problema derivat de desar les dades en un model relacional però treballar-les amb un model objecte, tot i que moltes vegades el model objecte acaba sent un model orientat a serveis.

La solució més estesa és utilitzar Hibernate o un altre ORM (Object/Relational Mapping ). El problema ve quan l’aplicació evoluciona, el model de dades canvia i cal propagar els canvis al codi del programa.

Una alternativa a utilitzar ORM és utilitzar una classe DAO genèrica per a totes les taules de la base de dades. Aquesta solució permet reduir molt el codi. És molt més eficient, perquè no cal mapar les dades cada vegada que es llegeix de la bbdd. Però per contra complica com la comprensió i manteniment del codi allà on hi ha la lògica de negoci. Per exemple

taules.getTaula("Factura").get(codiFactura).getColumna("Total")= ...
taules.persisteixCanvis("Factura");

Una solució que es podria explorar seria utilitzar objectes POJO buits, sense codi com a facade de la classe DAO genèrica. Aleshores es podria utilitzar AOP per connectar els POJO a la classe DAO genèrica.

Quedaria alguna cosa així:

public class TaulaFactura {
   double total;
   id     idFactura;
   List<TaulaLiniesFactura>   liniesFactura; 
   // getters and setters publics ...
}

class DAO {
   Map< String, TaulaGenerica >  taules;
   public void putTaula(String nom, Schema schema) { ... };
   public TaulaGenerica getTaula(String nom) { ... };
   public void peristeixCanvis(String nom) { ... };
}

public class AOP {
// intercepta els getters i setters de TaulaFactura  i els connecta amb el DAO
}

  



No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>