Ga naar hoofdinhoud

Lesprogramma

1 Richtlijnen voor Services

We bespreken het huiswerk en bespreken de richtlijnen voor het gebruik van Services.

Zie ook 📑 richtlijnen voor het gebruik van services.

2 Relaties tussen klassen bekijken

Jullie gaan kijken naar de klasses in verschillende lagen en bepalen welke relaties tussen deze klassen zijn toegestaan en welke niet.

🦉 In deze opgave gebruiken we het onderstaande klassendiagram van de Bestellingapplicatie.

690579ae76c87ab1eae08e397a424544

PlantUML broncode voor "klassendiagram bestellingapplicatie"
@startuml
hide circle

'left to right direction
'skinparam linetype ortho
'skinparam linetype polyline


package "Controller" {
class ProductController
}

package "Service" {
class ProductService
}

package "Repository" {
interface BestellingRepository
interface ProductRepository
}

package "Domain" {

rectangle "Bestelling Aggregate" {

class Bestelling <<Aggregate Root>> {
id: Integer
status: Status
totaalPrijs: Geld
plaatsBestelling()
voegProductToe(product, aantal, prijs)
veranderStukPrijs(product, nieuwePrijs)
}

class Bestelregel <<Entity>> {
aantal: int
stukPrijs: Geld
getRegelPrijs(): Geld
}
}

rectangle "Product Aggregate" {
class Product <<Aggregate Root>> {
id: Integer
naam: String
prijs: Geld
}

}
}

' --- Hidden associaties zodat alle packages netjes van boven naar beneden getekend worden
"Controller" -[hidden]- "Service"
"Service" -[hidden]- "Repository"
"Repository" -[hidden]- "Domain"
' ---

' --- Domain associaties ---
Bestelling "1" --> "bestelregels \n" Bestelregel: "\t"
Bestelregel "1" --> "\nproduct 1" Product
' ---

@enduml

Klassendiagram met 7 klasse(n) en 5 relatie(s).

Klassen:

  • Klasse ProductController zonder methoden en attributen
  • Klasse ProductService zonder methoden en attributen
  • Interface BestellingRepository zonder methoden en attributen
  • Interface ProductRepository zonder methoden en attributen
  • Klasse Bestelling met stereotype Aggregate Root met:
    • publieke methode 'plaatsBestelling', zonder parameters, return type void
    • publieke methode 'voegProductToe', met parameter(s) 'product', 'aantal', 'prijs', return type void
    • publieke methode 'veranderStukPrijs', met parameter(s) 'product', 'nieuwePrijs', return type void
    • publieke attribuut 'id' van type Integer
    • publieke attribuut 'status' van type Status
    • publieke attribuut 'totaalPrijs' van type Geld
  • Klasse Bestelregel met stereotype Entity met:
    • publieke methode 'getRegelPrijs', zonder parameters, return type Geld
    • publieke attribuut 'aantal' van type int
    • publieke attribuut 'stukPrijs' van type Geld
  • Klasse Product met stereotype Aggregate Root met:
    • publieke attribuut 'id' van type Integer
    • publieke attribuut 'naam' van type String
    • publieke attribuut 'prijs' van type Geld
    • geen methoden

Relaties:

  • heeft een associatie-relatie met naam 'Service' met
  • heeft een associatie-relatie met naam 'Repository' met
  • heeft een associatie-relatie met naam 'Domain' met
  • Bestelling heeft een associatie-relatie met naam '"\t"' met Bestelregel
  • Bestelregel heeft een associatie-relatie met naam 'product 1' met Product

2a. Associaties omlaag

✏️ In <jouw repo van week 4>/oefeningen/les-2/lesprogramma/onderdeel2/2a_associaties_omlaag vind je in elk bestand een of meerdere associaties. `

👉 Verander ❓ in een ❌, ✅, of ⚠️, afhankelijk van of je denkt dat de associaties altijd verboden is, altijd toegestaan is of dat hierover (zinnig) gedisccusieerd kan worden.

2b. Dependencies omlaag

We introduceren eerst het idee van een dependency.

✏️ In <jouw repo van week 4>/oefeningen/les-2/lesprogramma/onderdeel2/2b_dependencies_omlaag vind je in elk bestand een of meerdere dependencies.

👉 Verander ❓ in een ❌, ✅, of ⚠️, afhankelijk van of je denkt dat de dependency altijd verboden is, altijd toegestaan is of dat hierover (zinnig) gedisccusieerd kan worden.

2c. Associaties omhoog

✏️ In <jouw repo van week 4>/oefeningen/les-2/lesprogramma/onderdeel2/2c_associaties_omhoog vind je een bestand met meerdere associaties.

👉 Verander ❓ in een ❌, ✅, of ⚠️, afhankelijk van of je denkt dat de associaties altijd verboden is, altijd toegestaan is of dat hierover (zinnig) gedisccusieerd kan worden.

2d. Dependencies omhoog

✏️ In <jouw repo van week 4>/oefeningen/les-2/lesprogramma/onderdeel2/2d_dependencies_omhoog vind je een bestand met meerdere dependencies.

👉 Verander ❓ in een ❌, ✅, of ⚠️, afhankelijk van of je denkt dat de dependency altijd verboden is, altijd toegestaan is of dat hierover (zinnig) gedisccusieerd kan worden.

3 Complexe Custom Queries over meerdere repositories

In sommige gevallen kan Spring Data niet zelf de result set bepalen en moeten we zelf een ResultSetExtractor schrijven zoals we dat met JDBCTemplate's deden.

We laten een paar voorbeelden van custom queries zien en bespreken hoe je deze kunt implementeren.

4 Weekopgave

(Als er nog tijd over is) We bespreken welke elementen van deze les terugkomen in de weekopgave