-
Notifications
You must be signed in to change notification settings - Fork 5
Description
Contexto
Actualmente, las plantillas generan, para la capa de negocio, una dupla interfaz + implementación tanto para servicios como para DAOs. Es decir, para cada entidad se crean clases del estilo:
XxxService+XxxServiceImplXxxDao+XxxDaoImpl
En la práctica, en la mayoría de los proyectos generados sólo existe una implementación para cada interfaz.
Problema
Este patrón genera varias consecuencias:
- Código adicional sin valor claro: se crean más ficheros y tipos (interfaces) que rara vez se utilizan para polimorfismo real.
- Más ruido para el desarrollador: cuesta más navegar por el código generado (dos clases por cada servicio/DAO).
- Dificulta identificar los casos especiales: al tener interfaces para todo, no se distinguen los casos donde realmente hay varias implementaciones y el polimorfismo tiene sentido.
En términos de diseño, esto se corresponde con el patrón denominado Interface Implementation Pair: generar sistemáticamente una interfaz para cada clase, aunque sólo exista una implementación.
Propuesta
Proponer un nuevo modo de generación para servicios y DAOs, donde por defecto se genere una única clase concreta, sin interfaz asociada:
-
Servicios:
- Generar sólo
XxxService(sinXxxServiceImpl). - La clase
XxxServicese anotaría directamente con@Servicey se inyectaría por tipo.
- Generar sólo
-
DAOs:
- Generar sólo
XxxDao(sinXxxDaoImpl). - La clase
XxxDaose anotaría con@Repositoryy se inyectaría igual.
- Generar sólo
La creación de interfaces se reservaría para los casos donde se prevé de forma realista que pueda haber múltiples implementaciones.
Implementación (como posible idea inicial)
-
Introducir una nueva opción de configuración en el plugin, algo como:
uda.business.interfaces.enabled=true|false -
Posible comportamiento:
false(por defecto): sólo clases concretas- Se genera únicamente:
XxxServiceXxxDao
- Se genera únicamente:
true: comportamiento actual- Se generan interfaz + implementación
XxxService+XxxServiceImplXxxDao+XxxDaoImpl
- Se generan interfaz + implementación
Las plantillas de generación comprobarían este flag para decidir:
- Si generar
XxxService+XxxServiceImplo sóloXxxService. - Si generar
XxxDao+XxxDaoImplo sóloXxxDao.