Gå til indholdet

Afsluttende opgave: Mini CRM

Denne opgave er den afsluttende opgave for kurset Funktionsorienteret og async C#. Målet er at udvikle et mini-CRM-system ved hjælp af objektorienteret, funktionel programmering og asynkron programmering.

Opgavebeskrivelse

Du skal udvikle en konsolapplikation i .NET 8 (eller højere), der giver brugeren mulighed for at arbjede med kunder i et lille CRM-system. Programmet skal benytte et (eksisterende) REST API til at hente, viser og gemme diverse kundeinformationer.

Forudsætninger!!!

Inden du går i gang med opgaven, skal du sørge for at have et simpelt REST API downloaded og kørende på din lokale maskine. Du kan finde det på GitHub, og der er instruktioner til at få det op og køre i README-filen. Inden du går videre er det vigtigt at du kan tilgå API’et via en browser på http://localhost:5000. Prøv eksempelvis at hente alle kunder ved at besøge http://localhost:5000/customers i din browser.

Hvis du har problemer med at få API’et op og køre, så kontakt din instruktør inden du går videre.

Krav

Følgende krav skal opfyldes:

  • Programmet skal være en standard .NET 8 (eller højere) konsolapplikation - du kan benytte en konsolapplikation med top-level statement (uden en klasse Program og en Main-metode) eller en konsolapplikation med en klasse Program og en Main-metode. Det er op til dig.
  • Programmet vil skulle hente data fra nævnte REST API, og du bestemmer selv hvordan du vil gøre det. Du kan benytte den indbyggede HttpClient, RestSharp eller skabe en klient (se readme-filen i API’et) og benytte denne. Under alle omstændigheder skal du benytte asynkron programmering ved at benytte async og await.
  • I readme-filen i API’et kan du se klassen Customer og dens properties. Du skal benytte denne klasse i dit program til at repræsentere en kunde.
  • Programmet skal indeholde en Print-metode som kan benyttes til at printe en linje af gangen. Metoden skal tage en string som parameter (der der skal printes) og en delegate (gerne en indbygget delegate) der indeholder den metode der kan benytte til at printe linjen. På den måde kan du nemt skifte mellem at printe til konsollen, fil, database eller andet.

Når programmet starter, skal det vise en menu i konsollen, hvor brugeren kan vælge mellem forskellige valgmuligheder, og som standard skal programmet printe til konsollen.

Menuen skal indeholde følgende valgmuligheder:

  1. Sæt programmet til at printe til konsol
  2. Sæt programmet til at printe til en fil (brug filen output.txt)
  3. Sæt programmet til at printe til både konsol og fil
  4. Vis API version: Her skal du hente API’ets version fra API’et og vise den i konsollen.
  5. Vis alle kunder: Her skal du blot hente alle kunder fra API’et som en liste (List<Customer>) og vise deres id, navn og alder i konsollen. De skal dog være sorteret - først efter navn og derefter alder. Det er vigtig at du benytter LINQ med en lambda expression til at sortere kunderne.

Tip

Hvis du benytter HttpClient er der en metode GetFromJsonAsync<T> som kan hente data fra et API og deserialisere det til en liste af objekter. Du kan benytte denne metode til at hente kunder fra API’et.

Aflevering og bedømmelse

Aflever løsningen som en ZIP-fil, der indeholder projektets filer (ekskl. /bin og /obj mapper). Sørg for, at Program.cs, eventuelle andre filer og .csproj-filen er inkluderet. - Din løsning vurderes ud fra: - Program.cs består af de nævnte instruktioner.
- Koden er veldokumenteret og let at læse. - Der er ingen warnings i ved kompilering.

Samtale

Efter aflevering aftaler vi en kort samtale, hvor du kan forklare din løsning. Jeg vil stille spørgsmål om, hvordan du har tænkt og hvorfor du har valgt at gøre som du har gjort.

Som afslutning på samtalen vil vi snakke om en eller flere af følgende spørgsmål. Du bedes derfor overveje følgende:

  • Forklar overordnet begreberne serialisering og deserialisering.
  • Hvad er forskellen på synkron og asynkron programmering?
  • Hvad er en Task
  • Hvad er en delegate og hvad kan den bruges til?
  • Hvad er en Action og en Func og hvad er forskellen på dem?
  • Hvad er en Predicate og hvad kan den bruges til?
  • Hvad er en LINQ og hvad kan det bruges til?