Coding Standard
Dette dokument beskriver de fælles regler for struktur og kodestandard i vores fælles GitHub repository.
Formålet er at sikre:
- ensartet struktur
- overskuelig kode
- lettere samarbejde
- lettere feedback
- Det er vigtigere med kode der nemt kan læses, end “korte one liners”
- Husk at skrive kommentarer som hjælp til læsning af koden
- Husk at opdatere kommentarer ved ændring af eksisterende kode
- En god kommentar beskriver hvad og hvorfor noget sker, ikke hvordan
Følgende er specificeret i pom.xml og versioner må ikke ændres.
Java 21 skal anvendes af alle teams. Projektet skal kunne kompileres og afvikles med denne version.
Maven anvendes til håndtering af dependencies og build. Alle teams arbejder med den fælles pom.xml.
Javalin og Thymeleaf 7.2.3 anvendes til udvikling af webapplikationen. HTML-sider genereres på serversiden med Thymeleaf.
PostgreSQL anvendes som fælles databaseteknologi.
JUnit 5 anvendes til automatiserede tests.
SLF4J 2.0.17 anvendes til logging i applikationen.
Behov for nye biblioteker eller versionsopdateringer skal drøftes og godkendes i føllesskab, før ændringerne integreres i main branch.
Dette skal sikre, at alle teams arbejder med en ensartet teknologistak og undgår unødvendige konflikter i den fælles kodebase.
Projektet er opdelt i packages. Hver package repræsenterer en type ansvar/arbejdsopgave.
app/
├── configuration/
├── controllers/
├── dto/
├── entities/
├── exceptions/
├── persistence/
├── services/
└── Main.java/
Hver gruppe placerer deres Java klasser i sub packages navngivet efter teamnavn:
app/controllers/teama/
app/controllers/teamb/
app/entities/teama/
app/entities/teamb/
Templates placeres under:
src/main/resources/templates/
Hver gruppe opretter en undermappe:
templates/teama/
templates/teamb/
Eksempel:
templates/teama/error.html
templates/teamb/error.html
Placeres i undermapper til disse:
resources/public/css/
resources/public/images/
resources/public/js/
Eksempel:
css/teama/
images/teama/
Placeres i undermapper til denne:
resources/sql/
Eksempel:
sql/teama/init.sql
sql/teamb/init.sql
Klassenavne følger Javas standard, dvs. PascalCase (Stort begyndelsesbogstav).
PostController
UserMapper
Book
Metoder og variable følger Javas standard, dvs. camelCase (lille begyndelsesbogstav).
createUser()
getAllPosts()
Undgå:
Team1PostController ❌
User_controller ❌
👉 Team-navn skal fremgår af package, ikke i klassens navn.
- små bogstaver
- bindestreg for sammensatte ord
Eksempel:
books.html
create-user.html
Fordi alle arbejder i samme database, skal tabeller have teamnavn som præfix for at vi kan undgå navnesammenfald. Vi benytter snake case med ‘_’.
Eksempel:
teama_users
teamb_users
Vær konsistent i navngivning af tabeller i enten ental eller flertal.
Vi benytter også snake case til sammensatte kolonnenavne, keys og indexes.
Eksempel:
user_id
salary_group
Brug udelukkende små bogstaver i tabelnavne, kolonner, keys indexes m.m. Det gælder både i SQL scripts og i JDBC koden. Det får nemlig betydning, når vi deployer til en Linux server, som er case sensitiv.
Hver gruppe SKAL have egne URL præfix baseret på navn på jeres life hack app.
Eksempel:
/pizzacalculator/orders
/pizzacalculator/menu
/bmicalculator/calculate
/bmicalculator/history
Skal følge Single Responsibility princippet. Dvs. kun have ét ansvar.
Det kunne være være:
- en Data Mapper, som har ansvar for at opdatere brugeroplysninger i databasen.
- en DTO klasse, som samler data på tværs af domæneobjekter og returnerer i ét kald.
- en Service klasse til at beregne den samlede pris for en ordre.
- skal være korte
- skal have ét ansvar
- input skal valideres
- brugeren skal have fejlbeskeder
- applikationen må ikke crashe
- Udfyld navn i Git config
- Branch merge sker altid med code review (Pull Request)
- Branch navn skal være beskrivende og enten indeholde teamnavn + tekst eller issue nr., f.eks. teama-animated-menu-items eller issue-#16
- Commit beskrivelser skal være sigende.
Add post entity
Create user registration
Fix validation bug
fix
done
hej