Estoy escribiendo un método que forma parte de la interfaz pública de una clase de Java. En términos generales, permite al que llama especificar los valores que se asignarán a un número de entidades de base de datos, por lo que debe proporcionar tanto los ID de las entidades mismas como los valores que se les asignan.¿Es mejor usar una lista de pares o dos listas?
Estoy vacilando entre implementar esto como List<Pair<Integer, Integer>>
o solo dos argumentos List<Integer>
. Ambos obviamente trabajarían , y ninguno causaría ningún problema de implementación o eficiencia en mi método. Básicamente es la misma información en cualquier caso (una matriz 2xn), simplemente con rayas diferentes.
Así que me gustaría obtener algunas opiniones sobre cuál crees que sería mejor y por qué.
Ventajas que veo hasta ahora para la lista de pares:
- refleja con mayor precisión la relación real entre las entidades
- elimina algunas clases de error dinámico (por ejemplo, lista de longitudes unido mal)
Ventajas para el par de listas:
- No confía en ningún n-JDK clases (simples como
Pair
es de entender como un concepto) - No requiere de la construcción de los objetos auxiliares sólo para transportar los datos en torno
- Las personas que llaman son más propensos a tener los argumentos en listas separadas de todas formas, por lo no es necesario volver a alinear los datos antes de llamar al método
Ambos casos tienen la seguridad de tipo idéntico, así como la misma posibilidad de discrepancia de argumentos (por ejemplo, ingresando valores primero e IDs segundos cuando debería ser al revés). Este último problema se puede evitar creando un contenedor trivial alrededor de Integer
llamado algo así como PrimaryKey
, que tiene sus propios pros y contras y es ortogonal a este problema de todos modos, ya que se puede usar igual de bien en ambos casos.
Sin embargo, hay un término medio que podría ser una tercera opción: una clase de contenedor trivial con campos enteros para objectId y value. Esto no alista la ayuda del compilador para garantizar que los objetos sean correctos a través del tipado, pero proporciona una capa adicional de seguridad en las asignaciones. No creo que vaya por esto, sin embargo, ya que no me gusta la idea de contaminar una interfaz pública con una clase trivial como esta.
Todos los puntos buenos sobre el punto de OO, y las opciones de refactorización - gracias. –
Como una ventaja adicional: si tiene una lista de pares, puede hacer una lista de triples fácilmente si lo necesita. Los requisitos cambian, ya sabes. –
Por eso abogo por no utilizar un objeto Pair explícitamente :-) –