Convenciones de Nombres para Funciones Booleanas y de Manipulación de Datos en Go

GusGus
4 min read

El correcto nombramiento de funciones en Go es fundamental para mantener un código claro, mantenible y expresivo. En este artículo, abordamos las convenciones para funciones booleanas y de manipulación de datos, diferenciando entre funciones de reglas de negocio y funciones que operan directamente sobre la base de datos (como las generadas por gorm-gen).


📌 Convenciones de Prefijos para Funciones Booleanas en Reglas de Negocio

Estas funciones encapsulan lógica de negocio y dependen de múltiples condiciones más allá del simple estado de la base de datos.

PrefijoTipo de RetornoOrientaciónDescripciónEjemplo en Go
IsboolRegistroIndica si es/está en un estado lógicoIsUserEligibleForUpgrade(userID)
HasboolRegistroIndica si tiene algo en contexto de negocioHasCustomerLoyaltyDiscount(customerID)
CanboolRegistroIndica si un recurso puede realizar una acciónCanUserBuy(userID)
ShouldboolRegistroIndica si algo debería ocurrir según reglasShouldSendReminderEmail(orderID)
DoesboolRegistroIndica si hace/contiene algo dentro del negocioDoesOrderHavePendingPayments(orderID)
NeedsboolRegistroIndica si necesita algo basado en lógicaNeedsCustomerVerification(userID)
MayboolRegistroIndica si podría pasar dependiendo de condicionesMayCustomerReceivePromoEmail(customerID)
MustboolRegistroIndica si una acción es obligatoriaMustResetPassword(userID)
WouldboolRegistroIndica si algo pasaría bajo condiciones específicasWouldOrderBeDelayed(orderID)
WasboolRegistroIndica si algo ocurrió en el pasado en contexto de negocioWasUserPreviouslySuspended(userID)
DidboolRegistroIndica si hizo algo en el pasado con impacto en negocioDidCustomerCompleteFirstPurchase(customerID)

📌 Convenciones de Prefijos para Funciones de Obtención y Manipulación de Datos en Go (según GORM-GEN)

Estas funciones operan directamente sobre la base de datos y son generadas automáticamente por gorm-gen.

PrefijoTipo de RetornoOrientaciónDescripciónEjemplo en GORM-GEN
GetByIDstructRegistroObtiene un único recurso por IDuserDAO.GetByID(ctx, id)
FindBystructRegistroBusca un recurso por un campo específicocustomerDAO.FindByEmail(ctx, email)
ListBysliceColecciónLista múltiples recursos filtradosorderDAO.ListByCustomerID(ctx, id)
QueryBysliceColecciónEjecuta una consulta con múltiples filtrosproductDAO.QueryByCategory(ctx, category)
CreatestructRegistroCrea un nuevo recursoorderDAO.Create(ctx, order)
SaveboolRegistroGuarda o actualiza un recursocustomerDAO.Save(ctx, customer)
UpdateBybool/structRegistroModifica un recurso filtrado por un campoproductDAO.UpdateByID(ctx, id, updates)
DeleteByboolRegistroElimina un recurso por un campo específicouserDAO.DeleteByID(ctx, id)
ExistsByIDboolRegistroVerifica si un registro existe en la tabla por IDuserDAO.ExistsByID(ctx, id)
ExistsAnyboolColecciónVerifica si hay registros en una colecciónuserDAO.ExistsAnyActive(ctx)

📌 Convenciones de Prefijos para Funciones de Eventos y Mensajería en Go

Estas funciones se utilizan para gestionar eventos y notificaciones dentro de la aplicación.

PrefijoTipo de RetornoOrientaciónDescripciónEjemplo en Go
PublishboolColecciónPublica un eventoPublishOrderCreatedEvent()
SendboolColecciónEnvía un mensaje o notificaciónSendEmailNotification()
EmitboolColecciónDispara un evento en tiempo realEmitUserConnectedEvent()
BroadcastboolColecciónEnvía un mensaje a múltiples destinatariosBroadcastChatMessage()
SubscribevoidColecciónSe suscribe a un evento o canalSubscribeToOrderUpdates()
ConsumevoidColecciónConsume mensajes de una colaConsumePaymentQueue()

Conclusión

  • Funciones booleanas en reglas de negocio encapsulan lógica más compleja y combinan múltiples condiciones antes de devolver un resultado.

  • Funciones booleanas en GORM-GEN están enfocadas en representar datos en la base de datos sin incluir lógica adicional.

  • Funciones de eventos y mensajería permiten manejar notificaciones y comunicaciones de manera estructurada.

  • Separar estas funciones mejora la organización del código y permite una mejor reutilización dentro de la aplicación.

Este enfoque proporciona una forma clara y estructurada de definir funciones en Go, asegurando que cada capa del software tenga una responsabilidad bien definida. 🚀

0
Subscribe to my newsletter

Read articles from Gus directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Gus
Gus