javascript skill bijgewerkt n.a.v. eigen Dojo project
This commit is contained in:
+62
-3
@@ -11,9 +11,10 @@ Gebruik deze stijl wanneer je Javascript-code voor Hans schrijft of aanpast.
|
|||||||
|
|
||||||
Schrijf code zoveel mogelijk in lijn met hoe Hans racket code schrijft. Zie daarvoor de racket skill.
|
Schrijf code zoveel mogelijk in lijn met hoe Hans racket code schrijft. Zie daarvoor de racket skill.
|
||||||
|
|
||||||
Gebruik bij javascript als je een closure definitie maakt, bij voorkeur classes, m.a.w. ga voor OO en class definities in plaats van property gestuurde closures.
|
Gebruik bij javascript als je een closure definitie maakt een class.
|
||||||
|
Met andere woorden: ga voor OO en class definities in plaats van property gestuurde closures.
|
||||||
|
|
||||||
Liever
|
Dus wel:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
class Rectangle {
|
class Rectangle {
|
||||||
@@ -38,7 +39,7 @@ class Rectangle {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
In plaats van:
|
En niet:
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const Rectangle = (() => {
|
const Rectangle = (() => {
|
||||||
@@ -72,6 +73,8 @@ const Rectangle = (() => {
|
|||||||
|
|
||||||
Houd bronbestanden overzichtelijk.
|
Houd bronbestanden overzichtelijk.
|
||||||
Geen grote javascript bouwwerken.
|
Geen grote javascript bouwwerken.
|
||||||
|
|
||||||
|
Werk met modules en import/export.
|
||||||
Ga voor module gewijze code.
|
Ga voor module gewijze code.
|
||||||
Zorg dat modules zoveel mogelijk een eenheid zijn.
|
Zorg dat modules zoveel mogelijk een eenheid zijn.
|
||||||
|
|
||||||
@@ -81,5 +84,61 @@ dan wordt het onoverzichtelijk.
|
|||||||
Voorkom eindeloze nestingen.
|
Voorkom eindeloze nestingen.
|
||||||
Probeer dingen functioneel op te zetten, zoals dat in racket zou werken.
|
Probeer dingen functioneel op te zetten, zoals dat in racket zou werken.
|
||||||
|
|
||||||
|
### Klassen en objecten
|
||||||
|
|
||||||
|
- Aanvullend bij de bovenstaande class regel. Gebruik een class wanneer een
|
||||||
|
object een eigen identiteit, levensduur, toestand en bijbehorend gedrag heeft.
|
||||||
|
- Zorg dat een constructor een direct bruikbaar object oplevert.
|
||||||
|
- Geef concrete afhankelijkheden als betekenisvolle constructorargumenten door.
|
||||||
|
Introduceer geen algemene configuratie- of dependency-container zonder
|
||||||
|
concrete noodzaak.
|
||||||
|
- Geef de voorkeur aan samenstelling. Gebruik overerving alleen wanneer
|
||||||
|
daadwerkelijk sprake is van een stabiele is-een-relatie of een gedeeld
|
||||||
|
gedragscontract.
|
||||||
|
- Een domeinobject beheert zijn eigen toestand, validatie, wijzigingsmeldingen
|
||||||
|
en serialisatie. Andere modules horen niet rechtstreeks in zijn interne
|
||||||
|
datastructuur te werken.
|
||||||
|
|
||||||
|
### Modules en API's
|
||||||
|
|
||||||
|
- Gebruik expliciete imports en exports. Exporteer alleen de publieke
|
||||||
|
onderdelen van een module.
|
||||||
|
- Modulevariabelen zijn toegestaan voor werkelijke modulebrede toestand,
|
||||||
|
zoals een singleton, cache of gedeelde wachtrij.
|
||||||
|
- Behandel interne velden en helpers als implementatiedetails, ook wanneer
|
||||||
|
JavaScript die privacy niet technisch afdwingt.
|
||||||
|
- Behoud externe veldnamen bij een API- of serialisatiegrens. Normaliseer
|
||||||
|
gegevens expliciet bij het binnenkomen en uitgaan van de applicatie.
|
||||||
|
|
||||||
|
### Domein en gebruikersinterface
|
||||||
|
|
||||||
|
- Houd domeinlogica en DOM/GUI-logica in afzonderlijke modules.
|
||||||
|
- Laat GUI-objecten de publieke methoden van domeinobjecten gebruiken.
|
||||||
|
- Een domeinobject hoort geen kennis te hebben van concrete DOM-elementen,
|
||||||
|
dialogen of widgets.
|
||||||
|
|
||||||
|
### Asynchrone bewerkingen
|
||||||
|
|
||||||
|
- Centraliseer bewerkingen waarvan volgorde belangrijk is, zoals opeenvolgende
|
||||||
|
opslagopdrachten, in een herkenbare wachtrij of coördinator.
|
||||||
|
- Gebruik binnen één workflow één duidelijke asynchrone stijl.
|
||||||
|
- Gebruik arrowfuncties wanneer lexicale `this` gewenst is. Gebruik een gewone
|
||||||
|
functie wanneer de aanroepende API bewust een eigen `this`-waarde levert.
|
||||||
|
|
||||||
|
### Omvang en samenhang
|
||||||
|
|
||||||
|
- Een groot aantal regels is een signaal, geen harde grens.
|
||||||
|
- Splits een bestand wanneer het meerdere zelfstandig benoembare en stabiele
|
||||||
|
verantwoordelijkheden bevat, niet uitsluitend omdat een regelaantal is
|
||||||
|
overschreden.
|
||||||
|
|
||||||
|
## Documentatie
|
||||||
|
|
||||||
|
- Documenteer het doel en de functionele samenhang van modules, classes en
|
||||||
|
niet-triviale publieke methoden.
|
||||||
|
- Beschrijf parameters, resultaat, neveneffecten en relevante interne
|
||||||
|
samenwerking.
|
||||||
|
- Schrijf geen commentaar dat slechts iedere programmaregel in woorden herhaalt.
|
||||||
|
- Triviale getters, setters en lokale callbacks hoeven niet afzonderlijk
|
||||||
|
gedocumenteerd te worden wanneer hun werking direct duidelijk is.
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user