Compare commits

..

4 Commits

Author SHA1 Message Date
hans 5ff106ac14 .scm for scheme syntax 2026-09-02 23:18:57 +02:00
hans b257e195f9 architectuur principes 2026-09-02 11:53:11 +02:00
hans 048280cc5c architectuur principes 2026-09-02 10:08:08 +02:00
hans 0562a7d608 architectuur principes 2026-09-02 10:04:14 +02:00
4 changed files with 81 additions and 40 deletions
-39
View File
@@ -1,39 +0,0 @@
#lang racket/base
(require racket-makefile)
(define test-install #f)
(makefile 'skill
(target 'all
(displayln "Use (make 'install)"))
(target 'install
(let ((home (find-system-path 'home-dir)))
(when (eq? home #f)
(error "No home directory?, cannot find place of .codex"))
(let* ((pwd (current-directory))
(skilld (build-path home ".codex" "skills"))
(racket-skilld (build-path skilld "racket-skill"))
(js-skilld (build-path skilld "javascript-skill"))
(cp (lambda (to-dir file)
(let ((from (build-path pwd file))
(to (build-path to-dir "SKILL.md")))
(unless (directory-exists? to-dir)
(make-directory to-dir))
(displayln (format "cp ~a -> ~a" from to))
(unless test-install
(copy-file from to #:exists-ok? #t)))))
)
(cp racket-skilld "racket-skill.md")
(cp js-skilld "javascript-skill.md")
)))
(target 'test-install
(set! test-install #t)
(make 'install)
(set! test-install #f))
)
+44
View File
@@ -0,0 +1,44 @@
#lang racket/base
(require racket-makefile
racket/file)
(define test-install #f)
(makefile 'skill
(target 'all
(displayln "Use (make 'install)"))
(target 'install
(let ((home (find-system-path 'home-dir)))
(when (eq? home #f)
(error "No home directory?, cannot find place of .codex"))
(for-each (lambda (subdir)
(let* ((pwd (current-directory))
(skilld (build-path home subdir)) ;".codex" "skills"))
(racket-skilld (build-path skilld "racket-skill"))
(js-skilld (build-path skilld "javascript-skill"))
(cp (lambda (to-dir file)
(let ((from (build-path pwd file))
(to (build-path to-dir "SKILL.md")))
(unless (directory-exists? to-dir)
(make-directory* to-dir))
(displayln (format "cp ~a -> ~a" from to))
(unless test-install
(copy-file from to #:exists-ok? #t)))))
)
(cp racket-skilld "racket-skill.md")
(cp js-skilld "javascript-skill.md")
))
(list (build-path ".codex" "skills")
(build-path ".copilot" "skills")))
))
(target 'test-install
(set! test-install #t)
(make 'install)
(set! test-install #f))
)
+36
View File
@@ -142,3 +142,39 @@ Probeer dingen functioneel op te zetten, zoals dat in racket zou werken.
- Triviale getters, setters en lokale callbacks hoeven niet afzonderlijk
gedocumenteerd te worden wanneer hun werking direct duidelijk is.
# Architectuurprincipes
## MVC patroon
Over het algemeen zal bij het bouwen van de javascript code van een website
gebruik moeten worden gemaakt van het Model-View-Controller principe.
Een model bestaat uit de de interne data-representatie van gegevens en heeft
ook als verantwoordelijkheid om de opslag ervan richting een server backend
resp. import/export ervan te regelen.
Op het model worden views gemaakt. Die views presenteren het model naar een
gegeven situatie en maken het ook mogelijk om te interacteren met het model.
De controller zorgt koppelt de model-logica en de view-logica aan elkaar en
bevat business rules t.a.v. het presenteren en bewerken van de model logica.
## Encapsulatie
Classes, closures en modules hebben hun eigen interne wereld en een publieke
method/functie-interfaces. Rechtstreeks manipulatie van class/closure/module
gegevens is verboden.
## Separation of concerns
Scheid verschillende verantwoordelijkheden in afzonderlijke onderdelen
en voorkom dat één onderdeel meerdere, onderling onafhankelijke concerns
door elkaar heen behandelt.
# Specifieke aandachtspunten
## Het gebruik van browseropslag
Opslag in de browser, zoals bijvoorbeeld door localStorage te gebruiken, is
voor data/model verboden. Tenzij om een werkruimte te creëeren die nodig is
t.b.v. betrouwbaarheid en performance. Of caching te doen t.b.v. performance.
+1 -1
View File
@@ -1,2 +1,2 @@
#!/bin/bash
racket -e "(enter! \"Makefile.mk\") (make 'install)"
racket -e "(enter! \"Makefile.scm\") (make 'install)"