Autor
Soy Benjamín Gonzales B., desarrollador de software en GNBIT. Llevo muchos años trabajando en tecnología y sigo aprendiendo con cada cambio de herramientas, lenguajes y proyectos.
Al mantener un sistema, necesito poder entender lo que hace y corregirlo, incluso cuando ya pasó tiempo desde que lo escribí. Me preocupa encontrar una operación sencilla repartida entre tantas piezas que antes de cambiarla tenga que reconstruir cómo funciona. De ese trabajo y de mis intentos por llevar estructuras conocidas a Rust fui llegando a DFE.
No empecé buscando nombres nuevos para las carpetas. Quería organizar mis servicios backend de una forma que pudiera leer y mantener, aprovechando Rust sin repetir por costumbre la estructura que había usado en otros lenguajes. El dominio conservó su lugar; los flows, el acceso a datos y la coordinación de los cambios tomaron la forma que explico en esta guía.
Comparto esta propuesta porque puede servirle a alguien que se haya encontrado con esa misma dificultad. No pretendo que sea la arquitectura adecuada para cualquier proyecto escrito en Rust. Expongo mis decisiones y sus costos para que otros puedan evaluarlas, probarlas y discutirlas.
Desde qué experiencia la propongo
Mi punto de partida es el backend: recibir una petición o un trabajo, obtener datos, aplicar reglas y guardar el resultado. Ahí encontré las dificultades que DFE intenta resolver. No tomo esa experiencia como una receta para kernels, drivers o sistemas embebidos, donde el hardware, la memoria y los tiempos pueden mandar sobre el diseño. Tampoco espero que una biblioteca, un compilador o un motor se organice como un servicio de negocio.
Incluso en backend, prefiero evaluar qué aporta antes de cambiar un proyecto. Si el equipo conoce otra arquitectura y puede mantener bien su código, adoptar DFE no es un objetivo por sí mismo. Si necesita intercambiar implementaciones, puede usar traits; no tiene que renunciar a ellos para seguir esta propuesta.
Sigo refinando DFE. Si un caso muestra que una decisión complica el trabajo en vez de ayudar, quiero poder revisarla y explicar el cambio. Me interesa compartir una forma de trabajar que pueda discutirse y mejorarse, no defenderla para cualquier problema.
Otros textos
En el manifiesto cuento cómo llegué a esta forma de trabajar. El artículo Domain–Flow–Effects (DFE): una arquitectura pensada para Rust amplía ese recorrido en español.
Escribo sobre desarrollo en Código Línea. Puedes conocer un poco más de mí en Sobre mí.