Fork me on GitHub
#clojure-france
<
2021-08-03
>
cyppan09:08:56

Hello ! Ici c’est grosse refacto de l’été à coup de Polylith et Pathom 3, génial en terme de dev xp

😍 3
val_waeselynck16:08:56

Purée, Polylith j'ai regardé 2 fois et je comprends toujours pas l'attrait du truc

👍 6
cyppan06:08:15

C’est simplement un moyen d’organiser une grosse codebase clojure en de multiples projets déployables indépendamment, dans un monorepo. je prévois un blog post pour expliquer ce que ça nous a apporté plus concrètement.

cyppan06:08:00

La documentation du tool clojure est excellente pour bien comprendre https://github.com/polyfy/polylith

val_waeselynck17:08:38

Bé justement, je trouve pas que la documentation de Polylith soit excellente pour justifier d'utiliser ça plutôt que tools.deps + des protocoles + quelques conventions d'organisation du code. Si ton blog post peut aborder cette question ça m'intéresse.

val_waeselynck17:08:22

Notamment, la façon qu'a Polylith de définir des interfaces (via des fichiers qui définissent les mêmes Vars, comme C avec ses header files) me semble très douteuse comparé à l'utilisation de protocoles, qui est le mécanisme de polymorphisme par défaut en Clojure.

cyppan17:08:57

Pour moi ce n’est pas la même chose, tu vas découper ton code en des isolations logiques, plus ou mois grosses, les “components”, mais je vois plutôt ces components comme des librairies que tu utilises dans tes projets, par exemple tu aurais un component “store”, un “aws”, un “parser”, etc... qui peuvent s’utiliser mutuellement d’ailleurs, d’où l’image des legos. Le parallèle tient bien car dans une librairie tu ne vas exposer qu’une partie de ton code, la partie publique, tu n’exposes pas les détails d’implémentation => c’est ce que tu vas mettre dans le fichier interface.clj de chaque component, et la CLI Polylith va lever une erreur si tu require du code d’un component qui n’est pas dans l’interface. On utilise les protocoles dans notre code par exemple, à l’intérieur des components, peut-être que tu faisais référence à une partie de la doc où ils parlaient de comment switcher d’un composant à un autre en production ou en développement, mais j’ai l’impression que cette partie n’y est plus, et c’est tant mieux car c’était effectivement un peu confus.

cyppan17:08:04

l’avantage par rapport à le gérer soi-même avec deps.edn, c’est simplement que c’est ce que fait Polylith, c’est documenté, et je trouve ça bien fait 🙂 si tu as déjà quelque chose qui marche bien il n’y a pas forcément d’intérêt en effet, il y a quand même un gros plus c’est la détection do code qui a été modifié, polylith est capable de te dire les components et les projets qui sont impactés par tes changements de code, c’est un gros win pour optimiser le run des tests, la CI, et déclencher uniquement les déploiements nécessaires

cyppan17:08:27

La série de blogs de sean corfield ou il explique justement leur transition d’une gestion custom à Polylith est intéressante à lire, il était sceptique au début : https://corfield.org/blog/2021/04/21/deps-edn-monorepo-2/ (et les suivants)

val_waeselynck00:08:26

@U0CL38MU1 merci pour l'explication. > je vois plutôt ces components comme des librairies que tu utilises dans tes projets, par exemple tu aurais un component “store”, un “aws”, un “parser”, etc... qui peuvent s’utiliser mutuellement d’ailleurs, d’où l’image des legos. Le parallèle tient bien car dans une librairie tu ne vas exposer qu’une partie de ton code, la partie publique, tu n’exposes pas les détails d’implémentation J'ai peut-être rien compris, mais je ne suis pas du tout convaincu 🙂 l'utilisation que tu décris me semble être le cas d'usage parfait pour des protocoles. À mes yeux le rôle d'une librairie n'est pas spécialement de cacher une implémentation derrière une interface, mais juste de rendre du code disponible - c'est une préoccupation orthogonale. Mais bref, n'en parlons pas plus ici - ce serait sans doute plus intéressant de lancer un débat sur ClojureVerse, comme ça d'autres personnes pourront participer ou en profiter.

cyppan06:08:39

yep, pour le coup je ne comprends pas pourquoi tu parles de protocole, Polylith ne propose pas une solution d’extensibilité du code, mais de découpage, il faudrait que tu testes sur un petit projet concret peut-être pour que ce soit plus clair.

cyppan06:08:18

et peut-être que ce n’était pas clair : Polylith n’a pas vraiment d’intérêt si tu n’as pas besoin de plusieurs déploiements différents (“projects”: par exemple une lambda aws, une api, un consumer de queue, une cli, ...) avec un packaging de certaines parties du code seulement (“components”) dedans

val_waeselynck16:08:28

Quand je lis la doc, j'ai l'impression que les auteurs ne savent pas que defprotocol existe

val_waeselynck16:08:57

Je suis curieux que quelqu'un me donne un éclairage alternatif au discours officiel - j'avoue ne pas trouver l'argument "it's just like lego blocks" très utile pour comprendre les tradeoffs

🧱 3
val_waeselynck16:08:23

Faudra peut-être que je lance un débat sur ClojureVerse un de ces jours

ep18:08:43

Salut, américain en France, dev clojure chez oscaro (a distance). Y a-t-il d'autres près de Lyon ?

👍 2
agu monkey18:08:05

@ep desole je suis pas de lyon, t'as le droit de nous parler de la stack chez Oscaro ? y'a du clojure ?

ep18:08:24

Oui, on utilise clojure pour tout le backend et clojurescript pour le front

👍 2
papachan23:08:35

@ep sympa. Lyon c'est tres bien.

❤️ 2