Domain-komponentit

domain Domain.dll sisältää jokaista näkymää vastaavan `Model`-luokan (esim. `UserModel`). Kukin `Model`-luokka sisältää näytön tarvitseman toimintalogiikan ja metodit, jotka hakevat tiedot `Repository`-moduulista `State`-luokan kautta `Services`-metodeilla. `Model`-luokka on tietoinen `State`-luokasta ja pääsee sen kautta tarpeen mukaan käsiksi muihin tilan `Model`-luokkiin. Näin toteutetaan esimerkiksi tilanne, jossa `DeviceModel` tarvitsee leimauslajeja: se voi kutsua `state.StampcategoryModel`-luokan metodeja, kuten `state.StampcategoryModel.SelectStampcategory(2345)`.

Luokkakaavio

graph TD subgraph "Domain: State (partial class)" StateBase["State.cs
+ Loaded: bool
+ LoginToken: string
+ MessageType: string
+ MessageContent: string"] Users["State.Users.cs
+ UserModel: UserModel
+ LoadUsersAsync()
+ SaveUserAsync()
+ SelectUser(id)"] Devices["State.Devices.cs
+ DeviceModel: DeviceModel
+ LoadDevicesAsync()
+ SaveDeviceAsync()
+ SelectDevice(id)"] Stamps["State.Stamps.cs
+ StampModel: StampModel
+ LoadStampsAsync()
+ MarkTransferedAsync()
+ DeleteTransferedAsync()"] Stampers["State.Stampers.cs
+ StamperModel: StamperModel
+ LoadStampersAsync()
+ SaveStamperAsync()
+ SelectStamper(id)"] StampCategories["State.StampCategories.cs
+ StampcategoryModel: StampcategoryModel
+ LoadStampCategoriesAsync()
+ SaveStampCategoryAsync()
+ SelectStampCategory(id)"] end ServicesBox["KirjautuminenApi
Aikaleimaapi"] StateBase <-->|Kutsuu metodeja / Palauttaa dataa| ServicesBox

Tila

State-luokka hoitaa sovelluksen tilanhallinnan. Jokaisella käyttäjällä on selaimen istunnon ajan oma instanssinsa tilasta, vastaavasti kuin Web Forms -sovelluksissa `Session`-olio. Tila on osa domain-kerrosta ja huolehtii domain-objekteista. Kuten koodista näkee, `State`-luokan instanssi saa parametrinaan `Services`-luokan, jota tila käyttää tietojen tuontiin ja vientiin tietokannasta. `State`-luokan ydintiedosto sisältää myös metodit, joilla serialisoidaan ja deserialisoidaan avainluokka, joka tallennetaan selaimen IndexedDB-tietokantaan. Olisi mielenkiintoista kuulla, miten kolmas osapuoli voisi saada tämän tiedon haltuunsa ilman pääsyä asiakaskoneelle ja asentaa sen omalle koneelleen. Vaikka näin pääsisi tapahtumaan, sovelluksessa on kaksi toimintoa, jotka estävät luvattoman käytön: PIN-koodi ja tunnistautuminen puhelinsovelluksella, mikäli ne on otettu käyttöön.


    

Esimerkki UserModel-tiedosto

Koodiesimerkistä näkee, että `UserModel.cs` on `partial`-luokka `State`-luokasta. Tämän ansiosta kaikki tiedoston metodit ovat `State`-luokan metodeja. Näin `State` muodostaa domain-tason, joka sisältää entiteettejä, kuten `UserModel`, joita käyttöliittymä hyödyntää. Kaikki metodit ovat `State`-luokan metodeja, joilla haetaan ja tallennetaan tietoja `Services`-luokan instanssin kautta. Metodit on ryhmitelty loogisiin kokonaisuuksiin omiin `partial`-tiedostoihinsa.