Topic: ORM : quando sono utili?  (Letto 91 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline nuzzopippo

  • python erectus
  • ***
  • Post: 231
  • Punti reputazione: 0
    • Mostra profilo
ORM : quando sono utili?
« il: Marzo 19, 2020, 08:14 »
Ciao

Dato che sto avendo un po' di tempo libero sto anche cercando di curiosare in giro e "vedere un po'" di qualcosa che non conosco per eventualmente integrarlo nelle mie prove.

Ieri sera ho iniziato a curiosare, da qui, in merito ad sqlalchemy ... roba complessa, mi sembra di capire, una astrazione che si astrae dalle specifiche dei singoli dialetti SQL dei motori di database supportati ma che richiede uno studio, tanto della libreria quanto della pianificazione riveniente dal suo uso, per molti versi anche più intenso di quello necessario ad un utilizzo diretto dello SQL, la cui conoscenza (unitamente al generico funzionamento dei db) comunque è presupposto necessario.

Certamente, un mezzo utile se si devono affrontare basi dati eterogenee ma mi viene il dubbio se e quanto possano essere utili a livello amatoriale ... mi spiego : un dilettante, seppur appassionato, avrà normalmente quale target piccoli applicativi, al più utilizzerà uno o due distinti sistemi di database (sqllite/access probabilmente) e sempre gli stessi, in tale condizioni (le mie, p.e.) vale la pena di misurarsi con dette astrazioni e sovrastrutture? E se si, perché?

Cosa ne pensate Voi, sulla questione?

Preciso che NON sto chiedendo supporto in merito, tant'è che ho postato al bar, solo di conoscere pensiero e motivazioni di chi voglia esporle, avanzato o meno che sia.

Ciao :)

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.031
  • Punti reputazione: 9
    • Mostra profilo
Re:ORM : quando sono utili?
« Risposta #1 il: Marzo 19, 2020, 14:43 »
Mah per prima cosa un orm non serve a "poter cambiare database senza cambiare il codice". Nessuno davvero vuole fare una cosa del genere: quando ti tocca davvero farlo in produzione, son dolori non da poco. E comunque, per quanto un orm possa astrarre, le differenze specifiche tra i diversi database sono sempre lì, e se vedi ci sono sezioni apposite della documentazione degli orm dedicate appunto a spiegare che cosa si può fare con un database e che cosa si può fare con l'altro.
(e quindi sì, anche gli orm sono "leaking abstractions"... non ti salvano dal peso di dover studiare a fondo il database sottostante https://pythoninwindows.blogspot.com/2020/03/come-imparare-python-senza-studiare.html )

In secondo luogo, beh, non esistono "dilettanti" e "professionisti", esiste codice scritto bene o scritto male. Quindi, se la domanda è se l'orm ti aiuta a scrivere codice migliore, direi che la risposta è sì... forse... nel senso che eviti certi problemi ma non è detto che tu scriva poi buon codice nello stile dell'orm.

A parte questo, se la domanda è "un orm è utile?", bisogna sempre chiedersi "rispetto a cosa"... Cioè, se non usassi un orm ficcheresti query sql direttamente nel codice? Allora sì, un orm è totalmente assolutamente utile. Ma del resto, se appena ti poni il problema di separare il codice di gestione del database dal codice della tua applicazione, in pratica è probabile che tu stia già inventando un piccolo orm casareccio... e allora, perché non usare direttamente un orm e farla finita, no?

Un'altra cosa terra-terra, è che un orm probabilmente ti costringe a pensare alla gestione del database in termini più corretti: capire che cosa è una connessione, che cosa è una transazione,... problemi di sicurezza... problemi di efficienza... etc. E' probabile che un principiante, studiando bene la documentazione dell'orm, finisca per imparare parecchio anche di sql.

Poi non è che un orm sia la bacchetta magica che risolve i problemi del mondo, eh. A livello teorico esiste un concetto che si chiama "object/relational impedance mismatch" (googla!) che in pratica dice che ci sono delle irriducibili difficoltà a mappare una "tabella" di database con un "oggetto" OOP... e sicuramente tutti gli orm danzano intorno a questo problema, ciascuno a suo modo. Ma onestamente, direi che prima di arrivare a quel punto, di strada se ne può fare parecchia.

Del resto non è che uno sia proprio obbligato a usare un orm. Sqlalchemy, per esempio, ha un orm ma ha anche tutta una libreria DAO estremamente ben fatta.

Offline nuzzopippo

  • python erectus
  • ***
  • Post: 231
  • Punti reputazione: 0
    • Mostra profilo
Re:ORM : quando sono utili?
« Risposta #2 il: Marzo 20, 2020, 10:39 »
Grazie del Tuo parere @Ric, ne tengo gran conto (nessun altro ne ha? Non siate timidi ;) ), tant'è che mi son messo a tradurmi il tutorial iniziale, per ora, giusto per vedere un po'.

Anche se, devo confessarlo, gli ORM sono un argomento che mi lascia particolarmente perplesso, principalmente considendo che :
Mah per prima cosa un orm non serve a "poter cambiare database senza cambiare il codice".

... comunque, roba nuova (per me), qualche idea nuova magari ne viene :)