On Dec 30 2011, 11:46 am, Fabrizio Levorin <
flevo...@gmail.com> wrote:
> [...]
>
> Mettiamo di avere le informazioni di un utente memorizzate in db, io
> creo l'oggetto passando l'id e la classe si occupa di ricavare tutte
> le altre informazioni dal dabatase.
>
> Avevo creato qualcosa del genere:
>
> [...]
>
> Questa cosa funziona ma:
> 1) non so se sia la strategia migliore
Se capisco le tue intenzioni, non è la strategia migliore.
Non perché tu stia facendo qualcosa di sbagliato, semplicemente perché
stai reinventando la ruota, visto che in pratica stai implementando un
ORM.
Su CPAN ne trovi tremila, testati su tutti i DBMS più diffusi,
sviluppati attivamente da anni e usati in produzione su progetti di
ogni dimensione.
Il più evoluto al momento è DBIx::Class, che probabilmente già
conosci:
https://metacpan.org/release/DBIx-Class
I suoi oggetti nativi non sono Moose-based, ma puoi facilmente
estenderli con Moose, se ti serve.
> 2) sono costretto a dichiarare 'name' come rw invece che ro
Se gli oggetti di quella classe sono mutabili (ovvero, nell'ottica
dell'ORM, se possono generare update sul db) non c'è niente di male.
Se sono invece immutabili (record in sola lettura, sempre nell'ottica
dell'ORM), allora puoi dichiarare 'name' come 'ro' associandogli un
'builder' (o un 'default'):
https://metacpan.org/module/Moose::Manual::Attributes#Default-and-builder-methods
Se poi vuoi che la totale privatezza dell'attributo, ricordati di
settare anche init_arg=>undef
https://metacpan.org/module/Moose::Manual::Attributes#Constructor-parameters-init_arg-
> Qualche suggerimento per la strada giusta da imboccare?
Se stai veramente tentando di implementare un ORM, non lo fare e usa
DBIx::Class ;-)
> Grazie mille e buona fine d'anno.
Grazie a te e buon inizio.