Esistono argomenti oggettivi a favore o contro l'utilizzo di oggetti vs ID univoco come parametri metodo / funzione? (e membri di altri oggetti?). Specialmente nel contesto di linguaggi tipicamente statici (C # / Java / Scala)
Pro dell'oggetto stesso:
- Altre chiamate typesafe. Con gli ID esiste il rischio di un ordinamento errato degli argomenti. Ciò può essere mitigato mantenendo una classe "mini" per ogni classe che memorizza solo l'ID di quella classe.
- Ottieni una volta dalla persistenza, non c'è bisogno di riaverla
- Con ID, se il tipo di ID cambia, dì int -> long, quindi richiederebbe modifiche su tutta la linea con possibilità di errori .. (courtey: https://softwareengineering.stackexchange.com/a/284734/145808 )
Pro dell'utilizzo dell'ID:
- La maggior parte delle volte non è necessario l'oggetto reale, lo farebbe solo uniqueid, quindi avere un ID consente di risparmiare tempo dall'ottenerlo dalla persistenza.
Una combinazione di queste tecniche, per quanto posso vedere, avrebbe solo svantaggi di entrambi e pro di nessuno dei due.
Dato che questo è un problema concretamente definito, spero che ci siano risposte obiettive e tipi non "penso" o "mi piacciono" ... :-).
EDIT: contesto sul suggerimento di un commentatore. L'unica limitazione è un linguaggio tipicamente statico. L'applicazione è un'applicazione generale, sebbene felice di ottenere risposte basate anche su specifici scenari di utilizzo.
EDIT: qualche altro contesto. Supponiamo che io abbia un sistema di gestione dei libri. Il mio modello è:
Book: { id: Int, isbn: String, donatedBy: Member, borrowedBy: Member }
Member: {id: Int, name: String}
Table- wishlist: { isbn: String, memberId: Int}
Table- borrows: { id: Int, memberId: Int}
Method:
isInWishList( book: Book, member: Member ) vs isInWishList( bookId: Int, memberId: Int)
handleBorrowRequest( memberId: Int, book: Book ){
//the login system doesn't actually get the entire member structure, only the member id. I don't need the full member yet. can run a query to verify that the memberId has less than max allowed books for borrowing.
}
Perché dovrei voler mantenere solo l'id e non l'intero membro? Di 'quando ricevo informazioni sul libro, raramente ho bisogno di sapere chi lo ha donato o preso in prestito. Ottenere le informazioni complete per popolare i campi donati e presi in prestito dai campi è eccessivo.
Naturalmente, questi sono solo i miei punti. Sono sicuro che mi mancano le cose, quindi volevo sapere quali sono i punti a favore / contro.