← Område 6 Projekt 1 · Datadriven webbapplikation Vanliga misstag

Webbserverprogrammering 1 · område 6

Projekt 1 – Datadriven webbapplikation

Din applikation ska gå att förvalta utan att någon öppnar en kodfil. Den som är inloggad ska kunna lägga till, ändra och ta bort poster, och varje post hör till en kategori i en egen tabell. Den som inte är inloggad ska kunna läsa, men inte komma åt något som ändrar.

Det som bedöms tyngst är att lagren håller

Komponenterna visar, tjänsterna gör arbetet, och databasen nås bara genom tjänsterna. Det är det du byggt upp under hela hösten, och nu ska det bära en hel applikation.

Det här är också vårens första projekt, och det första där processen bedöms, inte bara koden. Du skriver en projektplan innan du bygger, och en uppföljning mot den när du är klar.

1. Uppdraget

Du börjar inte om. Samma domän, samma entitet, samma tjänst som i område 5. Du får med dig fyra saker:

2. Tidsplanen

DatumPassVad ska vara klart
ons 13/135Uppgiften delas ut och läses tillsammans
ons 20/137Etapp 1: projektplanen committad
tis 9/242Etapp 2, milstolpe 1: kategorin, relationen och migrationen
ons 10/243Sportlov veckan efter
ons 24/245Etapp 3, milstolpe 2: alla fyra CRUD-operationerna, och sidorna skyddade
tis 2/346Etapp 4: avstämning med läraren, en och en
ons 3/347Sista arbetspasset
mån 8/3–Etapp 5: deadline kl 23:59
tis 9/348Prov 4

Milstolparna lämnas inte in. De är till för att du och jag ska se i tid om något halkar efter. Är du inte vid milstolpe 1 den 9/2 har du tre veckor kvar och det mesta av arbetet framför dig. Säg till då, inte den 3/3.

3. Så är uppgiften uppdelad

Projektet går i fem etapper. Varje etapp har ett datum, en kontroll du gör själv, och de krav som hör till den – på alla tre nivåerna.

NivåVad som skiljer den
EApplikationen fungerar, och lagren finns. En E-applikation gör det guiden gör
CValen är dina och motiverade. Du gör det av skäl du kan redovisa, och du har kontrollerat att det håller
ADu går längre än guiden på egen hand, och ser svagheter i ditt eget arbete innan någon annan gör det

C-kraven gäller utöver E-kraven, och A-kraven utöver C-kraven – i alla etapper. En etapp är klar när kontrollen går igenom, inte när alla kryss är satta. Det som inte blev klart i en etapp tar du med dig till nästa, och skriver om det i uppföljningen.

Kryssen sparas i din webbläsare, så du kan bocka av allteftersom.

4. Etapp 1 – Projektplanen

Klar onsdag 20/1 · pass 35–37

En fil i repots rot: PROJEKTPLAN.md. Den ska vara committad innan du börjat koda. Git visar när den kom in, och det är poängen.

Den ska svara på fem frågor:

  1. Vad ska byggas? Din domän, din huvudentitet och din kategori. Fyll i översättningstabellen ur guiden och klistra in den här.
  2. Vilka krav siktar du på? E, C eller A, och vilka punkter i kravlistan du ser som svårast för dig.
  3. Vad ingår inte? Minst en sak du medvetet väljer bort, och varför.
  4. När ska vad vara klart? Din egen tidsplan mot etapperna, pass för pass. Den får vara grövre än tabellen, men den ska vara din.
  5. Vad kan gå fel? Minst två risker, och vad du gör om de inträffar.

Rubrikerna att utgå från. Blocket går att kopiera – det är en mall, inte kod att öva på:

# Projektplan – <din applikation>

## Vad ska byggas?

| Filmarkivet | Mitt projekt |
|---|---|
| `Film` | … |
| `Genre` | … |

## Vilka krav siktar jag på?

## Vad ingår inte?

## När ska vad vara klart?

| Pass | Datum | Vad jag gör |
|---|---|---|

## Vad kan gå fel?

| Risk | Vad jag gör om den inträffar |
|---|---|

En projektplan är inte ett löfte. Det är en gissning som du sedan jämför med vad som hände. Ändrar du planen under arbetet gör du det i filen, med ett datum och ett skäl, och committar. Då syns både den gamla och den nya planen i historiken.

Kontrollen

Filen finns på github.com, och commiten är daterad senast 20/1.

Etapp 1 · krav för E

5. Etapp 2 – Datamodellen

Milstolpe 1 · klar tisdag 9/2 · pass 37, 40 och 42 · guidens steg 5–9 och 17

Din kategori får en egen tabell, och varje post hör till en kategori. Identity lägger till användartabellerna i pass 40, och det är en migration till. Det som kommer sedan – formulären, sökningen, inloggningen – bygger på att datamodellen står.

Kontrollen – fyra saker, i den här ordningen
  1. dotnet ef migrations list visar minst tre migrationer – den från område 5, relationen och Identity – och ingen står som (Pending).
  2. dotnet ef migrations script innehåller FOREIGN KEY och ON DELETE CASCADE i relationens migration.
  3. Detaljsidan visar postens kategori.
  4. Kategorisidan visar sina poster.

Klarar du alla fyra är du vid milstolpe 1. Faller någon är den nästa sak du gör, före allt annat.

dotnet ef migrations list
dotnet ef migrations script

Etapp 2 · krav för E

Etapp 2 · krav för C — utöver E

Etapp 2 · krav för A — utöver C

6. Etapp 3 – Operationerna

Milstolpe 2 · klar onsdag 24/2 · pass 36, 38–40, 44 och 45 · guidens steg 1–4 och 9–23

Alla fyra operationerna, hela vägen genom tjänstelagret. En sökning som görs i databasen. Validering av tre sorter. Och inloggning, med varje sida som ändrar data skyddad.

Operationerna gicks igenom i pass 36, före relationen. Har du byggt dem då, lägger du till rullistan för kategorin nu – guidens steg 9.

Kontrollen – med någon annan vid tangentbordet

Du säger vad som ska göras, den andra gör det. Du vet var man ska klicka och vad man ska undvika – det vet inte den andra.

  • Skapa en post med en kategori. Den syns i listan.
  • Läsa: detaljsidan visar kategorin, kategorisidan visar posten.
  • Ändra posten. Listan visar ändringen – inte en post till.
  • Ta bort posten. Bekräftelsesidan visas först, och posten finns kvar tills man bekräftar.
  • Skicka formuläret utan kategori. Ett svenskt felmeddelande.
  • Logga ut, och skriv varje sida som ändrar data direkt i adressfältet. Du ska hamna på inloggningen varje gång.
  • git grep DbContext -- Components ger ingen träff.
git grep DbContext -- Components

Etapp 3 · krav för E

Etapp 3 · krav för C — utöver E

Etapp 3 · krav för A — utöver C

7. Etapp 4 – Kvaliteten

Avstämning · tisdag 2/3 · pass 41, 43 och 46 · guidens steg 24–26

Applikationen fungerar. Nu ska den gå att läsa, och du ska veta att den håller.

Granskningen, pass 41

Någon annan går igenom din kod mot kodningsstandarden, och du går igenom någon annans. Den som granskar fyller i:

Spara granskningen. Det den hittade ska vara åtgärdat vid deadline, eller motiverat i uppföljningen. Tabellen över konventionerna står i guidens steg 24.

Självgranskningen, pass 46

Svara skriftligt, och spara svaren – de blir underlag till uppföljningen:

  1. Vilken milstolpe nådde du i tid, och vilken inte?
  2. Vad tog längre tid än du planerade? Varför?
  3. Vilka tre krav för din nivå är inte klara i dag?
  4. Vilket av dem gör du först?
  5. Finns det något du inte kommer att hinna? Skriv det nu, och varför.
Kontrollen – avstämningen, tre minuter

Du visar fyra saker, i den här ordningen:

  1. Radera .db-filen, kör dotnet ef database update, starta och logga in. Kategorierna, posterna och användaren finns.
  2. git grep DbContext -- Components ger ingen träff.
  3. Logga ut och skriv en skyddad adress. Du hamnar på inloggningen.
  4. PROJEKTPLAN.md – finns den, och har den ändrats?

Etapp 4 · krav för E

Etapp 4 · krav för C — utöver E

Etapp 4 · krav för A — utöver C

8. Etapp 5 – Leveransen

Deadline måndag 8/3 kl 23:59 · pass 47

Tre saker ska bli färdiga: README.md, UPPFOLJNING.md, och inlämningen.

README.md är skriven för den som aldrig sett projektet: vad som ska installeras, vilka kommandon som körs, och hur man loggar in. Till det kommer de texter som C- och A-kraven i de andra etapperna ber om.

UPPFOLJNING.md jämför planen med vad som hände. Rubrikerna att utgå från:

# Uppföljning

## Milstolpe för milstolpe

| Milstolpe | Planerat | Faktiskt | Varför skillnaden |
|---|---|---|---|
| Projektplan | 20/1 | … | … |
| 1: relationen | 9/2 | … | … |
| 2: CRUD | 24/2 | … | … |
| Deadline | 8/3 | … | … |

## Vad jag hann och inte hann

## Vad jag gör annorlunda i nästa projekt

## Förbättringsförslag

Förbättringsförslag är för A: minst tre egna förslag, och för vart och ett en uppskattning av vad det skulle kräva. Siktar du på E eller C kan rubriken stå tom.

"Allt gick bra" är inte en uppföljning

"Relationen tog en vecka längre, för att migrationen kraschade på min egen databas och jag inte förstod felet" är det. Använd svaren från självgranskningen.

Inlämningen

  1. Kontrollera att projektet startar och att varje sida svarar.
  2. Radera din .db-fil och kör dotnet ef database update igen. Starta, och kontrollera att kategorierna, posterna och användaren finns.
  3. Logga in med uppgifterna i din egen README.md. Går det inte kommer det inte att gå för mig heller.
  4. Logga ut och prova varje skyddad adress direkt i adressfältet.
  5. Kör git grep DbContext -- Components. Ingen träff.
  6. dotnet build. Läs varningarna, om det finns några.
  7. Skriv klart UPPFOLJNING.md, och läs igenom README.md som om du aldrig sett projektet.
  8. Gå igenom kraven i alla fem etapperna för den nivå du siktar på.
  9. git add ., git commit -m "…", git push
  10. Öppna ditt repo på github.com och kontrollera att Migrations/, PROJEKTPLAN.md och UPPFOLJNING.md finns där – och att .db-filen inte gör det.
  11. Klistra in repots adress i inlämningsrutan i itslearning.

Prov 4 är dagen efter, tisdag 9 mars, och det frågar om sådant du byggt i projektet.

Etapp 5 · krav för E

Etapp 5 · krav för C — utöver E

Etapp 5 · krav för A — utöver C

9. Så bedöms den

Projekt 1 prövar fler av kursens betygskriterier än någon inlämning under hösten.

KriteriumVad det betyder här
Datalagring i relationsdatabas På E en databas med två relaterade tabeller som byggs ur migrationer. På A en lösning av viss komplexitet: fler entiteter, egen validering och genomtänkta regler för vad som händer när data tas bort.
Applikationsarkitektur och separation av olika slags logik På E är presentationslagret i någon utsträckning skilt från resten. På C är det tydligt skilt: ingen komponent vet att det finns en databas.
Utvecklingsprocessen: planering och uppföljning Projektplanen och uppföljningen. På E finns de. På C är planen genomarbetad och justerad, och uppföljningen är nyanserad.
Kodning och dokumentation enligt vedertagen praxis Kodningsstandarden, kommentarerna och README.md.
Säkerhet På E skyddade sidor och hashade lösenord. På C har du prövat skyddet och dokumenterat det. På A har du hittat en svaghet själv.

Jag klonar repot, kör det och läser koden. Fyra saker väger tyngst – samma fyra som i avstämningen:

10. Vanliga misstag

Det här är det som gör att projektet underkänns i onödan.

MisstagVad som händerUndvik det så här
Projektplanen skrivs sistGit visar det, och uppföljningen jämför inte med någotCommitta den senast 20/1. Den får vara kort
Uppföljningen säger att allt gick braDen bedöms som ytlig, hur välskriven den än ärJämför milstolpe för milstolpe. Vad tog längre tid, och varför?
DbContext injicerat i en komponent för att det gick fortareUnderkänt E-kravLägg metoden i tjänsten. Det är hela poängen med höstens område 4
Bara menylänken doldVem som helst kan ändra data via adressfältet[Authorize] på varje sida som ändrar. Prova utloggad
Utloggningens endpoint utan kontroll av tokenVilken sajt som helst kan logga ut dina besökareIsRequestValidAsync. Guidens steg 23
Ta bort med en länkEn GET ändrar data, och det finns inget skydd mot andra sajterBekräftelsesida och formulär med POST
Migrationen kraschar på FOREIGN KEY constraint failedDin databas har rader utan kategoriHasDefaultValue med id:t på en kategori som finns. Guidens steg 6
Kategorin syns inte, inget felInclude saknasDen ska beställas i varje fråga som behöver den. Guidens steg 7
Ändringen blir en ny postDet dolda fältet för Id saknasGuidens steg 3
Ändringen sparas inte= i stället för ??=Guidens steg 3
Lösenordet går inte att logga in medCreateAsync misslyckades tyst, lösenordet var för kortMinst åtta tecken. Kontrollera efter en ren database update
Inloggningsuppgifterna saknas i README.mdJag kan inte bedöma det som ligger bakom inloggningenSkriv dem. Det är en övningsapplikation
@rendermode i projektetLivscykeln körs två gånger, och projektet är inte längre statisktDemot från lektion 43 hör hemma i ett testprojekt
Guidens regler med nya namnTiteln finns redan blir Namnet finns redan, och översättningen visar ingentingHitta regler som hör till din domän. Det är du som känner den
Allt committat sista helgenHistoriken visar inte arbetet, och kravet på åtta dagar fallerCommitta efter varje pass