Easy Driver

916 views

Published on

Ignite di Paolo Proni
in occasione del Codemotion, 5 marzo 2011: http://www.codemotion.it

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
916
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Easy Driver

  1. 1. Easy Driver • Libreria Java con un generatore di codice ad essa associato, che crea le classi necessarie per accedere ad un database relazionale.sabato 12 febbraio 2011
  2. 2. High Level • Livello più alto di JDBC • Niente uso di stringhe e meno errori a run-time.sabato 12 febbraio 2011
  3. 3. Piccolo è Bello • E’ uno strato piccolo • E’ uno strumento semplice da usare • Non è in competizione con Hibernate o TopLinksabato 12 febbraio 2011
  4. 4. Chi ti slega da un altro, lo fa per legarti a sé stesso. • Ci sono dei database come PostgreSQL, che sono liberi e cercano di aderire il più possibile agli standard. • Gli ORM generici non sfruttano pienamente la funzionalità di un database.sabato 12 febbraio 2011
  5. 5. Indipendenti, ma contenti? • EJB QL ha le funzionalità che vi servono ? • Non sentite la mancanza di una funzione che estragga il mese da una data dentro ad una query? • Vi pagano lo studio di nuove sintassi?sabato 12 febbraio 2011
  6. 6. Il capo ha fretta • In molti contesti la cosa più importante e produrre presto qualcosa. • Una bella architettura richiede tempo, che si può chiedere, mai pretendere. • Il capo non ha sempre ragione, però va capito.sabato 12 febbraio 2011
  7. 7. Obbiettivi • Ritorno alla semplicità. • Facilità nel cambio di linguaggio di programmazione. Java sarà il linguaggio preferito dalla community anche in futuro o si orienterà verso le grandi corporate? Quanto costa migrare in Python o C++ ?sabato 12 febbraio 2011
  8. 8. Idea 1: una classe rappresenta i metadati di una tabella. Idea 2: il lavoro duro e noioso lo fa un generatore.sabato 12 febbraio 2011
  9. 9. Dove si va ? Compatibilità con SQLite e porting verso C++ e Objective Csabato 12 febbraio 2011
  10. 10. Easy Driver cerca aiuto Aiutare un generatore di codice può aiutare un consulente oppure un’azienda concorrente ? Può darsi, però anche i concorrenti possono aiutarsi a volte, per slegarsi da fornitori scomodi...sabato 12 febbraio 2011
  11. 11. Easy Driver è credibile ? Sicuramente non è completo, ma c’è una base funzionante, collaborare può voler dire anche solo segnalare i difetti e proporre nuovi sviluppi. La credibilità di un progetto è data dalla gente che partecipa, più aiutate, più sarà credibile.sabato 12 febbraio 2011
  12. 12. A me basta il mio strumento! • Non esistono i coltellini svizzeri, c’è posto per un altro strumento nelle nicchie lasciate aperte dai framework principali. • Nelle schede industriali, nell’hardware embedded o mobile, uno strumento leggero, aiuta...sabato 12 febbraio 2011
  13. 13. Ai clienti piacerà ? • Che vantaggio avrebbero i clienti attuali ? • E’ un buon modo per fare demo in modo agile, comunque fare presto aiuta a trovarne dei nuovi.sabato 12 febbraio 2011
  14. 14. General Public License • Sarebbe meglio LGPL? • La diffusione del kernel di Linux non è stata ostacolata dalla licenza. Si invita chi fa un lavoro derivato ad applicare la stessa licenza, altrimenti mi si contatti almeno, l’obbiettivo è fare conoscenza...sabato 12 febbraio 2011
  15. 15. Il generatoresabato 12 febbraio 2011
  16. 16. La struttura package org.byteliberi; import org.byteliberi.easydriver.*; import org.byteliberi.easydriver.fields.*; public enum TabellaB { ! INSTANCE; ! private DBTable table; ! private IntField id; ! private VarcharField vc; ! private TabellaB() { ! ! this.table = new DBTable("tabella_b"); ! ! this.id = new IntField("id", false, table); ! ! this.vc = new VarcharField("vc", true, table); ! ! this.table.setPrimaryKey(new PrimaryKey(this.id)); ! } ! public final DBTable getTable() { ! ! return table; ! } ! public final IntField getId() { ! ! return id; ! } ! public final VarcharField getVc() { ! ! return vc; ! } }sabato 12 febbraio 2011
  17. 17. Object Model package org.byteliberi; public class TabellaBObjectModel { ! private Integer id; ! private String vc; ! public TabellaBObjectModel() { ! } ! public TabellaBObjectModel(final Integer id) { ! ! this.id = id; ! } ! public final Integer getId() { ! ! return id; ! } ! public final String getVc() { ! ! return vc; ! } ! public final void setId(final Integer id) { ! ! this.id = id; ! } ! public final void setVc(final String vc) { ! ! this.vc = vc; ! } }sabato 12 febbraio 2011
  18. 18. Factory package org.byteliberi; import java.sql.ResultSet; import java.sql.SQLException; import org.byteliberi.easydriver.ObjectFactory; public class TabellaBObjectModelFactory implements ObjectFactory<TabellaBObjectModel> { ! public TabellaBObjectModelFactory() { ! } ! @Override ! public final TabellaBObjectModel map(final ResultSet rs) throws SQLException { ! ! final TabellaB table = TabellaB.INSTANCE; ! ! final TabellaBObjectModel vo = new TabellaBObjectModel(); ! ! vo.setId( table.getId().map(rs, 1) ); ! ! vo.setVc( table.getVc().map(rs, 2) ); ! ! return vo; ! } }sabato 12 febbraio 2011
  19. 19. Struttura a Servizi public final TabellaBObjectModel selectByPK(final Connection con, final Integer id) throws SQLException { ! ! final TabellaB tableStruct = TabellaB.INSTANCE; ! ! final SelectQuery<TabellaBObjectModel> query = new SelectQuery<TabellaBObjectModel>(TabellaB.INSTANCE.getTable(), new TabellaBObjectModelFactory()); ! ! query.setWhere(new Equals(tableStruct.getId())); ! ! query.prepareQuery(con); ! ! query.addParameter(id); ! ! return query.getSingleResultAndClose(); ! } ! public final int deleteByPK(final Connection con, final Integer id) throws SQLException { ! ! final TabellaB tableStruct = TabellaB.INSTANCE; ! ! final DeleteQuery query = tableStruct.getTable().createDeleteQuery(); ! ! query.setWhere(new Equals(tableStruct.getId())); ! ! query.prepareQuery(con); ! ! query.addParameter(id); ! ! return query.execute(); ! } ! public final int insert(final Connection con, final TabellaBObjectModel model) throws SQLException { ! ! final TabellaB tableStruct = TabellaB.INSTANCE; ! ! final InsertQuery query = tableStruct.getTable().createInsertQuery(); ! ! query.prepareQuery(con); ! ! query.addParameter(model.getId()); ! ! query.addParameter(model.getVc()); ! ! return query.execute(); ! } ! public final int updateByPK(final Connection con, final Integer id, final TabellaBObjectModel model) throws SQLException { ! ! final TabellaB tableStruct = TabellaB.INSTANCE; ! ! final UpdateQuery query = tableStruct.getTable().createUpdateQuery(); ! ! query.setWhere(new Equals(tableStruct.getId())); ! ! query.prepareQuery(con); ! ! query.addParameter(model.getId()); ! ! query.addParameter(model.getVc()); ! ! query.addParameter(id); ! ! return query.execute(); ! }sabato 12 febbraio 2011
  20. 20. http://www.byteliberi.org/sabato 12 febbraio 2011

×