Fork me on GitHub
#clojure-norway
<
2024-03-03
>
teodorlu09:03:23

Satt akkurat og kikket på koden bak nettsiden til @tonsky (https://github.com/tonsky/tonsky.me/), synes han har gjort noen interessante valg. I midten av koden har han navnerommet https://github.com/tonsky/tonsky.me/tree/4f98ad99d2a7b59e27148fb0b5fdd5d95e1a4df3/src/site/core.clj. Men site.core har ikke avhengigheter til noen andre navnerom. Så bruker feks https://github.com/tonsky/tonsky.me/tree/4f98ad99d2a7b59e27148fb0b5fdd5d95e1a4df3/src/site/pages/projects.clj og https://github.com/tonsky/tonsky.me/tree/4f98ad99d2a7b59e27148fb0b5fdd5d95e1a4df3/src/site/pages/talks.clj ting fra core. Og https://github.com/tonsky/tonsky.me/tree/4f98ad99d2a7b59e27148fb0b5fdd5d95e1a4df3/src/site/server.clj samler så sammen alle sidene, og server med http. I egen kode har jeg opplevd friksjon med akkurat “skal komponenter bruke felles-tingen, eller skal felles-tingen bruke komponenter?“. Synes løsningen til Tonsky var elegant. Minner meg også om CJohansens oppfordring om å lage HTML-komponenter som gjør kun HTML, tar inn argumenter og returnerer hiccup eller en HTML-streng.

👀 1
teodorlu09:03:39

For å dra argumentene ☝️ bittelitt lenger, jeg påstår at tonsky og cjohansen argumenterer for mange av de samme prinsippene i https://tonsky.me/blog/utils/ (tonsky, 2020) og https://2023.javazone.no/program/85f23370-440f-42b5-bf50-4cb811fef44d (cjohansen, 2023).

👍 1
slipset07:03:18

Bare fordi. Jeg er av den oppfatning at tusen små ns’er er en PITA, så jeg begynner heller med et utils.clj som man da kan/bør/må følge med på og splitte opp. Typisk tegn på at man bør splitte opp er når man begynner med banner-comments a-la:

;;;
;;; File-utils
;;;
Da har man et ns som ber om å bli skapt. Hovedårsaken til at jeg er skeptisk til tusen små ns’er er at hvis alt du skal skrive er 1000 linjer kode, så kan du godt ha alt i et ns.

👍 2
2
teodorlu08:03:07

Ser den — jeg liker heller ikke 100 små navnerom. Man kan putte utils-funksjonen sammen med der den skal brukes. Men da kan det bli vanskelig å vite når man bør trekke ut et nytt navnerom. Tror også dette er veldig sensitivt til erfaring, vanskelig å vite når/hvordan man bør splitte uten å ha gjort det noen ganger.

slipset08:03:01

Jeg tror kanskje jeg ville startet med et stort navnerom, så kanskje etterhvert splitta ut i et utils og så når utils blir stort og uoversiktlig, splitta det opp i under-utils.

leifericf08:03:44

Jeg har ikke vært så bevisst på det men det føles naturlig for meg å gjøre alt i én fil/ett navnerom i starten. Jeg bruker bare core.clj ganske lenge og når et "tema" viser seg oppretter jeg en ny fil/et nytt navnerom. Men det er kanskje en ganske naiv måte å gjøre ting på? Fordelen er at jeg tvinger meg selv til å ikke tenke så mye på det store og abstrakte i begynnelsen før det blir litt mer konkret, men baksiden er at det virker litt tilfeldig og kanskje går på bekostning av designet/arkitekturen.

pez08:03:58

Om jag skriver en app från scratch börjar den alltid med ett enda ns.

slipset08:03:15

Jeg er forøvrig av den oppfatning at det store problemet er at man ikke klarer å splitte koden slik at man får funksjoner som burde bo i utils 🙂

cjohansen08:03:55

Hva mener du får funksjoner?

slipset08:03:30

Jeg mener at hvis man ikke tenker seg om, så skriver man store funksjoner som gjør alt for mye.

slipset08:03:12

Som med fordel kunne vært delt opp i mindre funksjoner, der noen av de funksjonene typisk etterhvert burde havne i util eller core eller noe.

pez09:03:18

@U3X7174KS Jag är nyfiken på vad i Tonskys artkel och cjohansen’s föredrag är så lika. Jag har inte sett föredraget, men på beskrivningen verkar det handla om olika saker?

teodorlu12:03:39

@U0ETXRFEW Tonsky skiller mellom “reusable libraries” og “business code”. > It also makes thinking about dependencies somewhat easier. You have a two-part graph: reusable libraries and business code. The bottom half can depend on the top half, but not vice versa. Here’s how it looks in Grumpy right now (arrows means “depends on”) […] I vedlagt skjermbilde viser Tonsky et eksempel fra egen kode. Cjohansen skiller mellom “ui-komponenter som ikke vet noe om domenet, som kun heter feks knapp” og “domenekode”. Fra https://www.kodemaker.no/blogg/2020-01-enkel-arkitektur/ (som jeg ser er signert av Magnar og ikke Christian, men jeg klarer ikke skille ideene til Magnar og Christian fra hverandre): > UI-komponentene er uavhenging av domene og kontekst. Jeg mener at Christian argumenter for samme prinsipp i Javazone-presentasjonen også. Jeg leser tonsky sin “reusable libraries” som Christians/Magnars “UI-komponenter uavhengig av domene og kontekst”, og “business code” som “domenekode”.

teodorlu12:03:58

Når jeg leser kommentaren min på nytt, innser jeg at det slett ikke var åpenbart hva jeg mente 😅

pez13:03:34

Tack. Jag uppfattade Tonskys inlägg som att det mer handlade om att bryta isär sitt utilities-namespace, men jag var kanske snål i min läsning. 😃

👍 1
teodorlu13:03:46

Ja, enig, Tonsky snakket mest om utils. Jeg tolket en del!

pez13:03:44

I #C013B7MQHJQ drar man library-tänket ett steg längre uppfattar jag det som. Och man begränsar det inte till icke affärskod.

1
teodorlu14:03:25

Spennende. jeg er interessert i å kunne behandle mer av koden min som “bibliotekskode”.

cjohansen14:03:23

Jeg tenker umiddelbart på Functional core, imperative shell. Ikke 1:1 overlapp, men der handler det om å ha så mye forretningslogikk som mulig uttrykt med pure functions. Hvis disse i tillegg jobber på generiske datastrukturer så kan mange av dem være “biblioteksfunksjoner”

👍 1