Existe-t-il des arguments objectifs pour ou contre l'utilisation d'objets par rapport à l'ID unique comme paramètres de méthode / fonction? (et membres d'autres objets?). Spécialement dans le contexte des langages typés statiquement (C # / Java / Scala)
Avantages de l'objet lui-même:
- Plus d'appels sécurisés. Avec les identifiants, il existe un risque de mauvais ordre des arguments. Cela peut être atténué cependant en conservant une «mini» classe pour chaque classe qui ne stocke que l'ID de cette classe.
- Obtenez une fois de la persévérance, pas besoin de revenir
- Avec l'ID, si le type d'ID change, disons int -> long, cela nécessiterait un changement généralisé avec possibilité d'erreurs .. (courtsey: https://softwareengineering.stackexchange.com/a/284734/145808 )
Avantages de l'utilisation de l'ID:
- La plupart du temps, aucun objet réel n'est nécessaire, seul l'identifiant unique le ferait, donc avoir un ID permet d'économiser du temps pour l'obtenir de la persistance.
Un mélange de ces techniques, pour autant que je puisse voir, n'aurait que des inconvénients des deux et des avantages de ni l'un ni l'autre.
Étant donné qu'il s'agit d'un problème concrètement défini, j'espère qu'il y a des réponses objectives et non des types "je pense" ou "j'aime" ... :-).
EDIT: Contexte sur la suggestion d'un commentateur - La seule restriction est une langue typée statiquement. L'application est une application à usage général, bien qu'elle soit également heureuse d'obtenir des réponses basées sur des scénarios d'utilisation spécifiques.
EDIT: Un peu plus de contexte. Disons que j'ai un système de gestion des livres. Mon modèle est:
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.
}
Pourquoi voudrais-je ne garder que l'ID et non le membre à part entière? Dites que lorsque je reçois des informations sur le livre, j'ai rarement besoin de savoir qui l'a donné ou emprunté. Obtenir leurs informations complètes pour remplir les champs donatedBy et borrowedBy est une exagération.
Bien sûr, ce ne sont que mes points. Je suis sûr que je manque des choses alors je voulais savoir quels sont les points pour / contre.