Skip to content

Propuesta: generar servicios/DAOs sin interfaz por defecto #56

@jalvarez1983

Description

@jalvarez1983

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 + XxxServiceImpl
  • XxxDao + 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 (sin XxxServiceImpl).
    • La clase XxxService se anotaría directamente con @Service y se inyectaría por tipo.
  • DAOs:

    • Generar sólo XxxDao (sin XxxDaoImpl).
    • La clase XxxDao se anotaría con @Repository y se inyectaría igual.

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:
        • XxxService
        • XxxDao
    • true: comportamiento actual
      • Se generan interfaz + implementación
        • XxxService + XxxServiceImpl
        • XxxDao + XxxDaoImpl

Las plantillas de generación comprobarían este flag para decidir:

  • Si generar XxxService + XxxServiceImpl o sólo XxxService.
  • Si generar XxxDao + XxxDaoImpl o sólo XxxDao.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions