Die App aus der letzten Lektion hat saubere ViewModels, aber ihre Daten stehen im Code. Eine Kladde, die nur Beispieltermine zeigt, ist keine. In dieser Lektion kommen die Daten aus der Web-API der Kladde aus K2, die App meldet sich bei Entra ID an, die Termine liegen auch lokal in einer Datenbank, und was ohne Netz eingegeben wird, geht später zur API, auch wenn die inzwischen etwas anderes weiß.
Der Schnitt dieser Lektion:
| Teil | Was entsteht |
|---|---|
| API | ein getypter Client, der die Termine und Kontakte der Kladde holt und einen Termin anlegt |
| Anmeldung | MSAL.NET, ein Token pro Aufruf, die Web-API prüft es |
| Speicher | SQLite für die Termine, Netzstatus mit Connectivity |
| Abgleich | zuerst lokal speichern, dann senden, Konflikte sichtbar halten |
Wo die Kladde steht
Zu Beginn gilt, was Lektion W2.2.1 gebaut hat: Die Bibliothek Kladde.App.Logic (nur net10.0) trägt ContactsViewModel,
AppointmentsViewModel, NewAppointmentViewModel, die Schnittstellen IKladdeData und INavigator und die Beispieldaten
SampleKladdeData (auf SampleData aufgebaut), dazu die Antworttypen ContactResponse und AppointmentResponse. Die App Kladde.App zeigt sie auf Seiten, und tests/Kladde.App.Logic.Tests prüft sie. Die Bibliothek und die Tests stehen in Kladde.slnx, die App nicht. Aus K2 brauchen Sie die
Web-API Kladde.Web mit GET /api/contacts, GET /api/appointments und POST /api/appointments, die Anmeldung über Entra ID mit den Rollen
Buero und Leitung (Lektion 2.6.2 und 2.6.3) und die Regel, dass eine Überschneidung mit 409 beantwortet wird (Lektion 2.3.7 und
Meilenstein 2 in Modul 2.11). Heißen Ihre Klassen und Dateien anders, behalten Sie Ihre Namen und übertragen Sie die Schritte.
Die Teile hängen so zusammen:
AppointmentsViewModel -> IKladdeData (KladdeData)
|- IKladdeApi KladdeApiClient: HttpClient + Bearer-Handler
|- IAppointmentStore SqliteAppointmentStore
`- AppointmentSync INetwork, API und Speicher
Ein Satz zur Richtung: Das ViewModel sieht weiter nur IKladdeData. Alles, was in dieser Lektion neu ist und kein MAUI braucht, kommt in die
Bibliothek und ist damit ohne Gerät prüfbar. In die App kommt nur, was die Plattform braucht: die Anmeldung, die Netzauskunft und die
Dateiablage.