Je suis à la recherche d'une solution architecturale au problème auquel je suis confronté. Je suis aux prises avec un énorme pipeline qui traite data
(qui est une structure très complexe). De manière générale, on peut l'illustrer comme suit :
(defn process [data]
(-> data
do-something-1
do-something-2
do-something-3
do-something-4
...
do-something-20
)
où chacun des do-something-*
Les fonctions peuvent être tout aussi complexes. Mon problème est qu'il y a beaucoup de couplage entre les fonctions dans une telle chaîne de traitement. Par exemple do-something-3
ajouter quelque chose aux données qui seront ensuite requises par do-something-9
qui ajoute un autre élément requis par do-something-18
et ainsi de suite. Ainsi, les données sont essentiellement enrichies par toutes ces fonctions lors de la descente en cascade de la macro de filtrage. Il est très difficile de garder la trace de ce qui se passe et quand. Tenir toute la chaîne de traitement dans ma tête est tout simplement une charge cognitive trop importante (ou du moins, j'ai trop peu de mémoire vive dans ma tête). Comment gérer de tels cas ? Je sais qu'il n'y a pas de solution miracle, mais peut-être y a-t-il quelque chose qui m'échappe (j'ai commencé à apprendre Clojure il y a quelques mois).