¿Hay algún argumento objetivo a favor o en contra del uso de objetos vs ID único como parámetros de método / función? (y miembros de otros objetos?). Especialmente en el contexto de lenguajes estáticamente escritos (C # / Java / Scala)
Ventajas del objeto mismo:
- Más llamadas de typesafe. Con las ID existe el riesgo de un ordenamiento incorrecto de los argumentos. Sin embargo, esto puede mitigarse manteniendo una clase 'mini' para cada clase que solo almacene el ID de esa clase.
- Obtenga una vez de la persistencia, no es necesario volver
- Con ID, si el tipo de identificación cambia, diga int -> long, entonces requeriría un cambio en todos los ámbitos con posibilidad de errores. (Courtsey: https://softwareengineering.stackexchange.com/a/284734/145808 )
Ventajas de usar ID:
- La mayoría de las veces no es necesario el objeto real, solo uniqueid lo haría, por lo que tener ID ahorra tiempo de obtenerlo de la persistencia.
Una combinación de estas técnicas, hasta donde puedo ver, solo tendría contras de ambos y pros de ninguno.
Dado que este es un problema definido de manera concreta, espero que haya respuestas objetivas y no tipos "Creo" o "Me gusta" ... :-).
EDITAR: Contexto sobre la sugerencia de un comentarista. La única restricción es un lenguaje estáticamente tipado. La aplicación es de uso general, aunque también está contenta de obtener respuestas basadas en escenarios de uso específicos.
EDITAR: algo más de contexto. Digamos que tengo un sistema de gestión de libros. Mi modelo es:
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.
}
¿Por qué querría mantener solo la identificación y no el miembro completo? Digamos que cuando recibo información sobre el libro, rara vez necesito saber quién lo ha donado o prestado. Obtener su información completa para llenar los campos donado por y prestado por es una exageración.
Por supuesto, estos son solo mis puntos. Estoy seguro de que me faltan cosas, así que quería saber cuáles son los puntos a favor / en contra.