Type something to search...
Convención de Nombres en Clases Java: Mejora de Legibilidad y Mantenibilidad

Convención de Nombres en Clases Java: Mejora de Legibilidad y Mantenibilidad

En proyectos de gran escala, identificar rápidamente el tipo de una clase facilita la comprensión del código, la colaboración y la depuración. Sin un esquema de nombres estandarizado, es común que los desarrolladores enfrenten dificultades al interpretar la funcionalidad de una clase solo por su nombre, lo que ralentiza el mantenimiento y el desarrollo. En entornos profesionales, donde múltiples equipos trabajan sobre el mismo código base, contar con una nomenclatura clara mejora la comunicación y reduce la posibilidad de errores. Para solucionar esto, se propone una convención de nombres basada en prefijos y sufijos que permita diferenciar los distintos tipos de clases en Java.

Para garantizar la claridad, adoptamos las siguientes reglas:

  • Prefijos:
    • Enumeraciones: E (Ejemplo: EUserRole)
    • Interfaces: I (Ejemplo: IUserService)
  • Sufijos:
    • Entities (Ent): Representan objetos persistentes. Ejemplo: UserEnt
    • Value Objects (VO): Objetos inmutables con valor significativo. Ejemplo: MoneyVO
    • Data Transfer Objects (DTO): Transporte de datos entre capas. Ejemplo: UserDTO
    • Repositories (Repo): Acceso a datos. Ejemplo: UserRepo
    • Services (Svc): Lógica de negocio. Ejemplo: UserSvc
    • Controllers (Ctrl): Gestionan solicitudes HTTP. Ejemplo: UserCtrl
    • Exceptions (Ex): Manejo de errores. Ejemplo: InvalidUserEx
    • Configuration (Cfg): Configuraciones de aplicación. Ejemplo: DatabaseCfg
    • Utility (Util): Métodos reutilizables. Ejemplo: DateUtil
    • Test (Test): Clases de prueba. Ejemplo: UserSvcTest
    • Commands (Cmd): Acciones en el sistema. Ejemplo: CreateUserCmd
    • Domain Events (Evt): Eventos de dominio. Ejemplo: UserCreatedEvt
    • Validation (Val): Validaciones. Ejemplo: UserVal
    • Adapters (Adp): Integraciones con otros sistemas. Ejemplo: ExternalServiceAdp
    • Message Brokers (Brk): Comunicación con colas de mensajes. Ejemplo: KafkaMsgBrk
    • Mappers (Map): Transformación de objetos. Ejemplo: UserMap
    • Views (View): Modelos de presentación. Ejemplo: UserView
    • Gateways (Gtw): Comunicación con servicios externos. Ejemplo: PaymentGtw
    • Factories (Fct): Creación de objetos. Ejemplo: UserFct
    • Specifications (Spec): Criterios de búsqueda. Ejemplo: UserSpec
    • Middleware (Mid): Interceptores de solicitudes. Ejemplo: AuthMid
    • Aggregates (Agg): Raíces de agregados DDD. Ejemplo: OrderAgg
    • Use Cases (UC): Casos de uso específicos. Ejemplo: RegisterUserUC
    • Queries (Qry): Consultas a la base de datos. Ejemplo: FindUserQry
    • View Models (VM): Modelos de datos para UI. Ejemplo: UserVM
    • Policy / Guard (Pol o Grd): Reglas de negocio. Ejemplo: UserAccessPol

Para aplicar esta convención en un proyecto, recomendamos documentarla dentro del repositorio, integrar validaciones automáticas en las revisiones de código mediante linters o revisiones de PR y aplicar la convención en nuevos desarrollos, refactorizando el código legado progresivamente.

Adoptar una convención de nombres en clases Java mejora la comprensión del código y la colaboración en equipos de desarrollo. Al estandarizar prefijos y sufijos, cada clase tiene un propósito claro y es más fácil de ubicar y utilizar. Implementar esta convención desde el inicio de un proyecto o refactorizar el código existente progresivamente traerá beneficios a largo plazo.

Tipo de ClasePrefijo/SufijoEjemploDescripción
EnumeracionesEEUserRoleDefine un conjunto de valores constantes
InterfacesIIUserServiceDefine contratos que deben implementar las clases
EntitiesEntUserEntRepresenta objetos persistentes en la base de datos
Value ObjectsVOMoneyVOObjetos inmutables que representan valores
DTOsDTOUserDTOTransporte de datos entre capas
RepositoriesRepoUserRepoAcceso a la base de datos
ServicesSvcUserSvcContiene la lógica de negocio
ControllersCtrlUserCtrlGestiona las solicitudes HTTP
ExceptionsExInvalidUserExManejo de errores y excepciones
ConfigurationCfgDatabaseCfgConfiguraciones de la aplicación
UtilitiesUtilDateUtilMétodos reutilizables
TestsTestUserSvcTestPruebas unitarias y de integración
CommandsCmdCreateUserCmdRepresenta una acción o comando
Domain EventsEvtUserCreatedEvtEventos del dominio
ValidationValUserValValidaciones de datos
AdaptersAdpExternalServiceAdpIntegración con sistemas externos
Message BrokersBrkKafkaMsgBrkComunicación con colas de mensajes
MappersMapUserMapConversión entre objetos
ViewsViewUserViewModelos de presentación
GatewaysGtwPaymentGtwComunicación con servicios externos
FactoriesFctUserFctCreación de instancias de objetos
SpecificationsSpecUserSpecDefinición de criterios de búsqueda
MiddlewareMidAuthMidInterceptores de solicitudes
AggregatesAggOrderAggRaíz de un agregado en DDD
Use CasesUCRegisterUserUCCasos de uso específicos
QueriesQryFindUserQryConsultas a la base de datos
View ModelsVMUserVMModelos de datos para UI
Policy/GuardPol/GrdUserAccessPolReglas de negocio y restricciones

Related Posts

Estructuración de Carpetas en Proyectos de Software

Estructuración de Carpetas en Proyectos de Software

En proyectos de software de gran escala, la falta de una estructura de carpetas bien definida puede generar desorden, dificultando la mantenibilidad, escalabilidad y comprensión del código. Muchas vec

Leer más
Estándar de Codificación y Gestión de Errores en Arquitecturas de Microservicios

Estándar de Codificación y Gestión de Errores en Arquitecturas de Microservicios

En el ecosistema de aplicaciones web modernas, la arquitectura de microservicios distribuidos se ha consolidado como un paradigma dominante. Su flexibilidad, escalabilidad y resiliencia son innegables

Leer más
Desarrollo de Software Implementando Gitflow

Desarrollo de Software Implementando Gitflow

Introducción El desarrollo de software requiere metodologías y flujos de trabajo que permitan un control eficiente del código fuente. Uno de los enfoques más utilizados para la gestión de versiones

Leer más
Implementando Trunk Based Development con Ramas de Vida Corta en Tu Equipo: Una Guía Completa

Implementando Trunk Based Development con Ramas de Vida Corta en Tu Equipo: Una Guía Completa

En el ámbito del desarrollo de software, la elección de una estrategia de versionamiento eficiente y estable es fundamental para el éxito de un equipo. El Trunk Based Development (TBD) tradicional, do

Leer más
Arquitectura DDD y Hexagonal: Construyendo Software para el Futuro

Arquitectura DDD y Hexagonal: Construyendo Software para el Futuro

En el dinámico mundo del desarrollo de software, la complejidad es el enemigo silencioso. Las aplicaciones crecen, los requisitos cambian y, sin una guía clara, el código puede convertirse rápidamente

Leer más
Manejando el Caos: Una Guía Definitiva sobre Excepciones de Dominio 🎯

Manejando el Caos: Una Guía Definitiva sobre Excepciones de Dominio 🎯

En el desarrollo de software moderno, escribir código que funciona perfectamente en escenarios ideales es solo el primer paso. La verdadera fortaleza de un sistema se manifiesta cuando debe enfrentar

Leer más
El Arte de Conectar: Forjando un DataSource Dinámico en Spring Boot

El Arte de Conectar: Forjando un DataSource Dinámico en Spring Boot

En el vertiginoso universo del desarrollo de software, donde la seguridad es un pilar innegociable y la agilidad es la moneda de cambio, nos enfrentamos a desafíos que van más allá de la simple lógica

Leer más