← Område 5 Inlämning 5 · Från modell till databas och formulär Vanliga misstag

Webbserverprogrammering 1 · område 5

Inlämning 5 – Från modell till databas och formulär

Din hårdkodade lista ska bli en databas, och din applikation ska kunna få nya poster utan att någon öppnar en kodfil. Fyra saker ska hänga ihop när du är klar: entitetsklassen, migrationen, tjänsten och formuläret. Attributen skrivs en gång på entiteten och styr både vad databasen accepterar och vad formuläret släpper igenom.

Det som bedöms tyngst är att valideringen håller på servern

En applikation som bara kontrollerar i webbläsaren har ingen kontroll alls. Webbläsaren är besökarens, inte din – allt som händer där går att stänga av med F12. Och databasen fångar inte heller felet: [Range(1, 5)] blir ingenting i tabellen, och betyget 99 går rakt in.

Kedjan har exakt ett ställe som håller, och uppgiften kräver att du bevisat att det gör det.

1. Uppdraget

Du börjar inte om. Projektet från område 4 är utgångsläget och växer.

Du får med dig fem saker:

2. De tre kontrollerna

Tre saker är lätta att göra själv och avgör om inlämningen är godkänd. Gör dem innan du lämnar in – det är samma kontroller jag gör när jag rättar.

KontrollGör så härVad det bevisar
1. Databasen byggs ur din modell Radera din .db-fil. Kör dotnet ef database update och sedan dotnet run. Får du tillbaka dina poster fungerar migrationen och frödata. Får du en tom databas ligger frödata fel.
2. En post överlever omstart Spara en post via formuläret. Stäng servern med Ctrl+C, starta om, titta igen. Är den kvar har du en databas. Är den borta har du inte det.
3. Servern håller F12 på formuläret. Ändra ett fälts type till text, ta bort min/max, skicka ett omöjligt värde. Sparas det håller inte valideringen. Svarar servern med felmeddelandet gör den det.

Den tredje står steg för steg på sidan om validering. Den tar två minuter och är ett C-krav.

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

3. Ska-krav — nivå E

Skillnaden mot C är att kedjan är genomtänkt: du kan säga vad varje attribut gör var, och valideringen håller där den ska.

4. Bör-krav — nivå C, utöver E

5. Utmaning — nivå A, utöver C

6. Så bedöms den

Uppgiften prövar två av kursens betygskriterier särskilt.

KriteriumVad det betyder här
Datalagring i relationsdatabas På E ska applikationen ha en databaskoppling och spara data mellan sidvisningar. På C ska lagringen vara permanent och genomtänkt. Migrationen är beviset på att databasen är byggd ur din modell och inte handknackad.
Kvalitetssäkring av funktionalitet, säkerhet och kodkvalitet Serversidesvalidering är det första riktiga säkerhetsmomentet i kursen. Att kringgå sin egen klientvalidering och se att servern håller är precis den sortens kontroll område 7 handlar om.

Jag läser koden och kör projektet. Tre saker väger tyngst:

Vad texten om attributen ska säga

"Jag har satt [StringLength(100)] på titeln." Det är en beskrivning av koden. Den säger ingenting om vad som hände.

"[StringLength(100)] syns inte i tabellen – kolumnen är TEXT utan längd, för SQLite har ingen. Regeln finns bara i formuläret, så en titel på 300 tecken går att skriva rakt in i databasen. Det betyder att valideringen är det enda som håller." Det är texten som efterfrågas. Den säger vad du såg och vad det betyder.

7. Inlämning

  1. Kontrollera att projektet startar och att alla sidor svarar.
  2. Radera din .db-fil och kör dotnet ef database update igen. Får du tillbaka en databas med dina poster fungerar migrationen.
  3. Spara en post via formuläret, starta om servern och kontrollera att den är kvar.
  4. Kringgå klientvalideringen med DevTools och kontrollera att servern stoppar.
  5. Ta skärmbilden av tabellen och lägg den i repot.
  6. Skriv texterna i README.md.
  7. Gå igenom kravlistan för den nivå du siktar på.
  8. git add ., git commit -m "…", git push
  9. Öppna ditt repo på github.com och se att Migrations/ finns där – och att .db-filen inte gör det.
  10. Klistra in repots adress i inlämningsrutan i itslearning.

Deadline är tisdag 22 december kl 23:59, samma dag som terminen slutar. Det finns inget prov efter det här området – lämna in och gå på lov.

8. Vanliga misstag

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

MisstagVad som händerUndvik det så här
.db-filen committadRepot innehåller din lokala databas i stället för ett recept*.db i .gitignore. Migrationen är det som ska delas
Migrations/ inte committadIngen annan kan bygga databasenKontrollera på github.com att mappen finns
Migration redigerad för handNästa migration blir felmigrations remove, ändra klassen, lägg till en ny
Gamla listan kvarEn sida kan smyga tillbaka till denRadera den. Bygget blir kontrollen
AddDbContext i stället för fabrikenA second operation was started on this contextAddDbContextFactory, ett context per metod
DataAnnotationsValidator glömdAllt sparas. Attributen läses aldrigRaden är inte valfri – utan den finns ingen validering
OnSubmit i stället för OnValidSubmitOgiltiga poster sparasOnValidSubmit körs bara när valideringen gick igenom
Bara klientvalidering testadDu vet inte om servern hållerDevTools-testet. Två minuter
ErrorMessage saknasEngelska felmeddelanden mitt i en svensk sajtSkriv den på varje attribut
Id som fält i formuläretKrockar med databasens numreringTa bort det. Databasen delar ut id
Litar på databasen som skyddsnätDen fångar ingenting utom tomma fält[Range] finns bara i valideringen. Se guidens steg 8
Allt committat sista kvällenHistoriken visar inte arbetetCommitta efter varje pass