La mejor manera de administrar 2 clases con propiedades casi idénticas en Java

Quiero comenzar afirmando que por razones que están más allá del alcance de esta pregunta, la base de datos no puede modificarse.

Dicho esto, el problema es que tengo 2 objetos de base de datos (T1, T2) con propiedades casi idénticas y comparten el mismo código de interfaz de usuario y lógica de negocios. Es decir, dependiendo de las opciones de configuración, la IU muestra datos T1 o datos T2. Toda la lógica es para administrar los datos también es la misma.

Lo que no quería era tener mi código lógico de aplicación lleno de instanceofoperadores y básicamente administrar 2 conjuntos de código idéntico. Entonces, mi solución fue crear una especie de clase de envoltura (TCombo) que tome T1 o T2 como constructor. Todos los captadores y colocadores tienen el diseño que se asemeja

public String getProp1() {
    if(o instanceof T1) ((T1)o).getProp1();
    else(o instanceof T2) ((T2)o).getProp1();
}

y básicamente sigue que para los setters también, así que cuando configuro un valor, el objeto DB se configura correctamente. Hacer esto me ha permitido usar 1 conjunto de código y solo administrar esta clase TCombo en todo el código, y esto ha funcionado muy bien. El problema es que la eficiencia es horrible y dado que mi aplicación se ocupa de grandes conjuntos de datos, tener que crear esta clase TCombo para cada elemento del conjunto de datos crea tiempos de carga horribles.

Mi pregunta es: ¿Cuál es la mejor manera de administrar estas clases para no tener que mantener 2 conjuntos de código lógico y también tener velocidad?

Respuesta 1

Esto es más o menos lo que las interfaces fueron diseñadas para manejar, por lo que configura una interfaz llamada algo así como Tsus captadores y configuradores comunes, y luego tiene ambos T1e T2implementa. El código que es común para ambos puede pasar referencias a la interfaz y llamar a los métodos comunes sin tener que usar llamadas a instanceof. Esto le permitirá implementar potencialmente código personalizado en los captadores y definidores de las instancias individuales (por ejemplo, si desea realizar la validación o algo en un setmétodo T1pero no en T2, etc.)

Otra opción sería tener una clase base común que extiendan sus dos objetos DB, y este objeto base contiene todos los campos comunes entre ellos. Luego simplemente pasa referencias a la clase base. Esto tiene los beneficios adicionales de no tener que implementar los mismos getters y setters en el mismo lugar.

En cualquier caso, necesitará usar instanceofy transmitir para obtener acceso a los métodos exclusivos de T1y T2, pero debería poder hacerlo con mucha menos frecuencia.

Respuesta: 2

Mi gerente me ha pedido que sugiera un servidor de aplicaciones para el trabajo de desarrollo de aplicaciones web. ¿Cuáles son los factores que deben considerarse antes de seleccionar cualquier servidor de aplicaciones para la web ...

Descargué TCPmon en un esfuerzo por intentar monitorear el tráfico a través de WSO2 ESB. Sin embargo, cuando intento ejecutar el jar, no pasa nada. ¿Cómo puedo hacer que se ejecute el jar?

Tengo una biblioteca json en github https://github.com/jillesvangurp/jsonj Esta biblioteca tiene un analizador basado en json simple, que utiliza una clase de controlador para hacer todo el trabajo de crear instancias de ...

¿Cuál es la relación entre web.xml y jboss-web.xml? Parece que: Jboss-web.xml especifica el dominio de seguridad (que se puede encontrar en login-config.xml) web.xml especifica cuál es el nivel de seguridad ...