Delle due, la mia preferenza è il primo metodo:
function insertIntoDatabase(Account account, Otherthing thing) {
database.insertMethod(account.getId(), thing.getId(), thing.getSomeValue());
}
Il motivo è che le modifiche apportate a entrambi gli oggetti lungo la strada, purché le modifiche preservino quei getter in modo che la modifica sia trasparente all'esterno dell'oggetto, quindi hai meno codice da modificare e testare e meno possibilità di interrompere l'app.
Questo è solo il mio processo di pensiero, principalmente basato su come mi piace lavorare e strutturare cose di questa natura e che si dimostrano abbastanza gestibili e mantenibili a lungo termine.
Non entrerò nelle convenzioni di denominazione, ma vorrei sottolineare che sebbene questo metodo contenga la parola "database", quel meccanismo di archiviazione può cambiare lungo la strada. Dal codice mostrato, non c'è nulla che lega la funzione alla piattaforma di archiviazione del database in uso - o anche se si tratta di un database. Abbiamo appena assunto perché è nel nome. Ancora una volta, supponendo che quei getter siano sempre conservati, sarà facile cambiare come / dove sono memorizzati questi oggetti.
Vorrei ripensare la funzione e i due oggetti, perché hai una funzione che ha una dipendenza da due strutture di oggetti, e in particolare dai getter impiegati. Sembra anche che questa funzione stia legando quei due oggetti in una cosa cumulativa che viene mantenuta. Il mio istinto mi sta dicendo che un terzo oggetto potrebbe avere un senso. Avrei bisogno di saperne di più su questi oggetti e su come si relazionano nella realtà e nella tabella di marcia anticipata. Ma il mio istinto è inclinato in quella direzione.
Allo stato attuale del codice, la domanda pone "Dove sarebbe o dovrebbe essere questa funzione?" Fa parte di Account o Altro? Dove va?
Immagino che ci sia già un terzo "database" di oggetti, e mi sto inclinando a mettere questa funzione in quell'oggetto, e poi diventa quel lavoro di oggetti per essere in grado di gestire un Account e un Altro, trasformare e quindi persistere anche il risultato .
Se dovessi arrivare a far conformare quel terzo oggetto a un modello di mappatura relazionale a oggetti (ORM), tanto meglio. Ciò renderebbe molto ovvio a chiunque lavori con il codice capire "Ah, è qui che Account e OtherThing vengono messi insieme e persistono".
Ma potrebbe anche avere senso introdurre un quarto oggetto, che gestisce il lavoro di combinazione e trasformazione di un Conto e un Altro, ma non di gestire i meccanismi della persistenza. Lo farei se prevedi molte più interazioni con o tra questi due oggetti, perché a quel punto vorrei che i bit di persistenza fossero presi in considerazione in un oggetto che gestisse solo la persistenza.
Vorrei scattare per mantenere il design in modo tale che uno qualsiasi degli account, OtherThing o il terzo oggetto ORM possa essere modificato senza dover cambiare anche gli altri tre. A meno che non ci sia una buona ragione per non farlo, vorrei che Account e OtherThing fossero indipendenti e non dovessero conoscere i meccanismi interni e le strutture reciproche.
Certo, se conoscessi il contesto completo che questo sarà, potrei cambiare completamente le mie idee. Ancora una volta, questo è il modo in cui penso quando vedo cose del genere, e quanto sia magra.