Ga naar hoofdinhoud
Verborgen page
Deze pagina is verborgen. Zoekmachines indexeren deze niet en alleen gebruikers met een directe link kunnen deze openen.

Quiz User Story Mapping, Application Services & Hexagonal Architecture

Quiz 1 — INVEST principes (Restaurant casus)

Bekijk de onderstaande User Story Map voor het Restaurant bestelsysteem. De map bevat een aantal fouten. Beantwoord de vragen.

User Story Map restaurant bestelsysteem
USM bronbestand (textusm formaat)
# labels: ACTIVITEIT, GEBRUIKERSDOEL, USER STORY, SPRINT 1, SPRINT 2, SPRINT 3, BACKLOG
# release1: Sprint 1 - Basics; Bestellen en betalen
# release2: Sprint 2 - Social; Reviews, Tikkie
# release3: Sprint 3 - Reviews geven
# release4: Backlog (rest)
Menukaart bekijken
Gast vraagt menu op
US-01 Gast bekijkt menukaart
US-02 Gast filtert op restricties
US-03 Gast ziet beoordelingen
US-16 Gast geeft beoordeling
US-04 Gast beheert menu
Bestelling plaatsen
US-05 Gast ziet ingrediënten
Bestelling plaatsen
Gast kiest gerecht
US-06 Gast voegt gerecht toe
US-07 Gast past bestelling aan
Gast bevestigt bestelling
US-08 Gast bevestigt bestelling
US-09 Gast ontvangt bevestigingsmail
Rekening betalen
Gast vraagt rekening op
US-10 Gast ziet rekening
US-15 Gast betaalt rekening
Betalen
US-11 Gast betaalt met pin
US-12 Gast betaalt met iDEAL
US-13 Gast splitst rekening
US-14 Medewerker ziet mislukte betalingen

Backlog overzicht:

US-X CodeVolledige user story
US-01Als gast wil ik de menukaart bekijken zodat ik iets kan kiezen
US-02Als gast wil ik de menukaart filteren op voedingsrestricties zodat ik geschikte gerechten zie
US-03Als gast wil ik beoordelingen zien van een gerecht zodat ik weet wat anderen vonden
US-04Als gast wil ik een volledig beheersysteem voor de menukaart waarmee ik gerechten kan toevoegen, bewerken, verwijderen, prijzen aanpassen, allergenen beheren, foto's uploaden en dagmenu's instellen zodat de kaart altijd up-to-date is
US-05Als gast wil ik de ingrediënten van een gerecht zien zodat ik het kan bekijken
US-06Als gast wil ik een gerecht toevoegen aan mijn bestelling zodat ik het geserveerd krijg
US-07Als gast wil ik mijn winkelmandje kunnen aanpassen zodat ik fouten kan corrigeren
US-08Als gast wil ik mijn bestelling bevestigen zodat de keuken aan de slag gaat
US-09Als gast wil ik een bevestigingsmail ontvangen zodat ik bewijs heb van mijn bestelling
US-10Als gast wil ik de rekening kunnen zien zodat ik weet wat ik verschuldigd ben
US-11Als gast wil ik kunnen betalen met pin zodat ik mijn schuld vereffen
US-12Als gast wil ik kunnen betalen met iDEAL zodat ik mijn schuld vereffen
US-13Als gast wil ik de rekening kunnen splitsen zodat ik alleen mijn eigen gerechten betaal
US-14Als restaurantmedewerker wil ik zien welke betalingspogingen (pin of iDEAL) zijn mislukt zodat ik een gast proactief kan helpen
US-15Als gast wil ik betalen
Kwaliteitscriteria voor een User Story Map

Een goede USM voldoet aan vier criteria:

  1. De USM heeft de goede structuur — backbone van activiteiten (1e niveau) en gebruikersdoelen (2e niveau), met user stories (3e niveau) eronder en horizontale releases.
  2. De USM heeft de goede vulling — user stories zijn geprioriteerd, meest waardevolle bovenaan; stories in sprint 1 hebben acceptatiecriteria.
  3. De user stories zijn goed qua vorm — elke story volgt 'Als [rol] wil ik [doel] zodat [reden]'; de rol is herkenbaar en het 'zodat'-deel beschrijft bedrijfswaarde.
  4. De user stories zijn inhoudelijk goed (INVEST) — Independent, Negotiable, Valuable, Estimable, Small, Testable.

Vragen over de INVEST-principes en kwaliteitscriteria voor user stories aan de hand van de restaurant casus.

Deze quiz helpt je toetsen of je de bron echt hebt bekeken/gelezen en begrepen. Zo niet: bekijk/lees de bron opnieuw. Gebruik deze quiz niet als 'gaming' voor de toets; de toetsvragen zijn inhoudelijk anders.

1.1. In de User Story Map hierboven staan de user stories in verkorte vorm (bijv. 'US-06 Gast voegt gerecht toe'). Is het toegestaan om user stories verkort op te schrijven in een USM?

1.2. In de map staat US-04 'Gast beheert menu' (zie backlog overzicht voor de volledige tekst). Welk INVEST-principe wordt als eerste geschonden?

1.3. US-06 en US-08 lijken afhankelijk van elkaar. Een collega stelt voor ze samen te voegen. Wat is het bezwaar, en wat is een betere aanpak?

1.4. Bekijk US-03 (zie backlog overzicht). Hoe valideer je als developer dat het 'zodat'-deel goed is?

1.5. US-09 gaat over een bevestigingsmail (zie backlog overzicht). Welke opmerking past het beste bij deze story vanuit het perspectief van core/supporting/generic domain?

1.6. US-15 in de map luidt (zie backlog overzicht): 'Als gast wil ik betalen'. Welk kwaliteitscriterium van de USM is hier in het geding?

Quiz 2 — Core domain vs. supporting/generic domain (Restaurant casus)

Vragen over de keuze tussen eigen software schrijven of bestaande oplossingen gebruiken.

In deze course hoef je alleen het onderscheid te kennen tussen core domain en supporting/generic domain als 2 categorieën. Een verder onderscheid tussen supporting en generic domain bestaat er in de literatuur wel, zie uitklapbalk, maar is niet relevant voor de toets of deze quiz.

ℹ️ Verschil supporting vs. generic domain (verdieping, niet voor toets)

Een supporting domain ondersteunt het core domain maar creëert alleen indirect meerwaarde. Denk aan voorraadbeheer in een restaurant: er wordt geen maaltijd bereid, maar zonder peterselie op het bord is de klant ontevreden. Een generic domain is bovendien generiek — het is bruikbaar voor heel veel andere bedrijven en problemen, niet specifiek voor dit bedrijf.

Een supporting domain kan tegelijk generic zijn (bijv. e-mail versturen), maar dat hoeft niet: een heel specifiek voorraadbeheerssysteem voor dit restaurant is supporting maar niet generic. Als zo'n specifiek supporting domain groot genoeg wordt, kun je het als apart bedrijfsonderdeel zien dat het als eigen core domain beschouwt.

Voor developers geldt: voor het core domain schrijf je custom software die jouw Unique Selling Point ondersteunt. Voor supporting/generic domains gebruik je bestaande libraries, frameworks of cloud-diensten en koppel je die aan je core domain software.

Dit onderscheid wordt ook gebruikt in het DDD Context Mapping pattern (een andere strategic pattern, naast Ubiquitous Language en Bounded Context — zie de uitklap in Les 1-3). En ook in de techniek Wardley Mapping, die visualiseert hoe generiek of uniek onderdelen van je systeem zijn. Beide behandelen en toetsen we verder niet in DomExp.

Deze quiz helpt je toetsen of je de bron echt hebt bekeken/gelezen en begrepen. Zo niet: bekijk/lees de bron opnieuw. Gebruik deze quiz niet als 'gaming' voor de toets; de toetsvragen zijn inhoudelijk anders.

2.1. Het restaurantbestelsysteem heeft twee features: (1) het bijhouden van bestellingen per tafel en (2) het verwerken van pinbetalingen via Mollie. Wat is het verschil voor jou als developer?

2.2. Het restaurant wil e-mails sturen naar gasten met hun bestellingsbevestiging. Tot welk domein behoort dit, en wat betekent dat voor de implementatie?

2.3. Het restaurant wil een systeem voor voorraadbeheer: bijhouden wanneer ingrediënten verlopen en tijdig weggooien. Dit ondersteunt de kernactiviteit (maaltijden bereiden) maar de core business draait nu ook zonder zo'n systeem?

2.4. Wat is de belangrijkste reden om voor het core domain eigen (custom) software te schrijven in plaats van een bestaand framework of cloud-dienst te gebruiken?

Quiz 3 — Lagen en relaties (Restaurant casus)

Vragen over toegestane en niet-toegestane relaties tussen lagen. Gebruik het onderstaande klassendiagram als referentie bij de vragen.

b775eab8446eb2b8798afd3e1d1bc37c

PlantUML broncode voor "Klassendiagram Restaurant lagen"
@startuml
package "Controller" {
class BestellingController {}
}

package "Service" {
class BestellingService {}
class MenuService {}
}

package "Repository" {
interface BestellingRepository {}
interface MenuRepository {}
}

package "Domain" {
rectangle "Bestelling Aggregate" {
class Bestelling <<Aggregate Root>> {
-id: Integer
-tafelId: Integer
}
class BestellingStatus <<Value Object>> {
CONCEPT
GEPLAATST
BETAALD
}
}
rectangle "Gerecht Aggregate" {
class Gerecht <<Aggregate Root>> {
-id: Integer
-naam: String
}
}
}

Bestelling --> BestellingStatus
@enduml

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

Klassen:

  • Interface BestellingRepository {} zonder methoden en attributen
  • Interface MenuRepository {} zonder methoden en attributen
  • Klasse Bestelling met stereotype Aggregate Root met:
    • private attribuut 'id' van type Integer
    • private attribuut 'tafelId' van type Integer
    • geen methoden
  • Klasse BestellingStatus met stereotype Value Object met:
    • publieke attribuut 'CONCEPT'
    • publieke attribuut 'GEPLAATST'
    • publieke attribuut 'BETAALD'
    • geen methoden
  • Klasse Gerecht met stereotype Aggregate Root met:
    • private attribuut 'id' van type Integer
    • private attribuut 'naam' van type String
    • geen methoden

Relaties:

  • Bestelling heeft een associatie-relatie met BestellingStatus

Deze quiz helpt je toetsen of je de bron echt hebt bekeken/gelezen en begrepen. Zo niet: bekijk/lees de bron opnieuw. Gebruik deze quiz niet als 'gaming' voor de toets; de toetsvragen zijn inhoudelijk anders.

3.1. Is de volgende associatie toegestaan: BestellingController --> BestellingService?

3.2. Is de volgende dependency toegestaan: Gerecht ..> MenuRepository?

3.3. Is de volgende dependency toegestaan: BestellingRepository ..> Gerecht (repository geeft Gerecht terug)?

3.4. Is de volgende dependency toegestaan: BestellingService ..> Bestelling (service gebruikt eigen domeinobject)?

Quiz 4 — Hexagonal Architecture (Restaurant casus)

Vragen over het plaatsen van klassen in de lagen van de hexagonal architecture. Gebruik het onderstaande diagram als referentie.

NB: In sommige bronnen (zoals Ted Young) heten poorten driving ports (inbound) en driven ports (outbound). In deze quiz gebruiken we de verzamelterm ports voor beide, en adapters voor de implementaties aan de buitenkant.

Hexagonal Architecture diagram

Deze quiz helpt je toetsen of je de bron echt hebt bekeken/gelezen en begrepen. Zo niet: bekijk/lees de bron opnieuw. Gebruik deze quiz niet als 'gaming' voor de toets; de toetsvragen zijn inhoudelijk anders.

4.1. In welke laag van de hexagonal architecture hoort de class BestellingController thuis?

4.2. In welke laag hoort interface PlaatsBestellingUseCase thuis?

4.3. In welke laag hoort interface BestellingRepository thuis?

4.4. In welke laag hoort class BestellingJDBCRepository thuis?

4.5. In welke laag hoort class MollieBetalingService thuis?