Mi piacerebbe avere una funzione che restituisca una copia perfetta di una istanza di documento, indipendente dalla classe del documento stesso.
Eventualmente al netto delle proprietà loaded, errori, warning, un po' come fa copy_from().
Per fare ciò:
- la funzione duplicate() è inutilizzabile, perché scombina totalmente PK, FK e flag. Mai usata in vita mia.
- la funzione copy_from() andrebbe bene, se non fosse per il fatto che io devo avere già dichiarato l'istanza del documento su cui eseguire la clonazione, in modo che la struttura delle proprietà corrisponda.
- perfetto, quindi devo creare tale istanza, ma non conoscendone a priori la classe, ho come unica strada "estrarre" il DNA dal documento sorgente ed utilizzarlo per creare il documento destinazione, corretto?
- il problema è che, estraendo il DNA con get_dna(), e creando poi il documento target con get_from_dna(), il framework prevede SEMPRE di caricare il documento dal database, eventualmente dalla cache: ma perchè?? io ho già un istanza caricata in memoria, voglio semplicemente averne una vergine su cui duplicare quella, perché questo metodo mi costringe a caricare qualcosa? (scartato)
- a questo punto posso prendere il nome della classe del documento originale con instanza.typeName(), passare alla funzione get_from_dna() SOLO il nome della classe, ed ecco finalmente creata la mia istanza vergine del documento, sulla quale posso finalmente usare il metodo copy_from().
-In effetti funziona... ma solo se questa procedura è definita nello stesso componente dove è dichiarata anche la classe, altrimenti la funzione get_from_dna() non trova il nome della classe nel suo scope e restituisce null....
- Quindi devo replicare questa funzione in ogni componente del mio progetto, e chiamare quella.
E finalmente porto a casa il risultato... ma non vi sembra un po' troppo astruso per una esigenza tutto sommato semplice e basilare come quella di duplicare un documento già in memoria?
Oppure sono io che non riesco a trovare un metodo più immediato? mi perdo l'uovo di colombo?
Non poteva essere una buona idea inserire un parametro "clone" nella funzione duplicate, che impedisse di modificare FK e PK e flag?