Perusteet

Seuraavassa piirroksessa esitetään sovelluksen ydinrakenne ja tapahtumien perus järjestys. Mallia havainnoidaan näkymämalleissa, jotka ovat vuorovaikutuksessa käyttöliittymän (views) kanssa. Käyttäjän syöttö laukaisee komennon, ja komennot suoritetaan peruuttamispinoa ylläpitävän ohjaimen kautta. Kukin komento toteuttaa do/undo/redo -käskyt ja kiteyttää jonkin toiminnon logiikan ja sen peruuttamisen. Muutoksia sovelletaan malliin (asiakirjaan) komennon suorittamisen yhteydessä, ja näkymämalleille ilmoitetaan tuloksena olevista muutoksista.

Huomaa tapahtumien kulku myötäpäivään.

Yllä olevassa asetelmassa tapahtumat kulkevat myötäpäivään. Mallia havainnoidaan erilaisilla näkymämalleilla, jotka puolestaan paljastavat ominaisuuksia, jotka on sidottu käyttöliittymään XAML:ssä. Näkymämallit käynnistävät komentojen suorittamisen ohjaimen kautta. Muutoksia sovelletaan asiakirjaan komennon suorittamisen yhteydessä, ja näkymämalleille ilmoitetaan tuloksena olevista muutoksista, jolloin silmukka sulkeutuu.

Tämän lopputuloksena mallin toteutus ei ole täysin tietoinen käyttöliittymän yksityiskohdista. Deserialisointimoduuli on ohjelmiston komponentti, joka on erikoistunut muuntamaan tallennetun datan – kuten tiedostojen tai verkkopalveluista saadun tiedon – takaisin ohjelmiston käsittelemään rakenteeseen. Tämä prosessi sisältää datan “kääntämisen” alkuperäiseksi, toimivaksi objektiksi tai rakenteeksi, jota ohjelmisto voi suorasti hyödyntää. Erityisesti tämä moduuli käsittelee DOM-tilan (Document Object Model) tiedostoja. DOM on standardoitu ohjelmointirajapinta, joka kuvaa lomakkeiden ja niiden sisällön rakenteellisesti. Deserialisointi prosessin avulla ohjelmistot pystyvät palauttamaan tallennettua dataa niiden dynaamiseen, muokattavaan muotoon. Kun deserialisointimoduuli lataa dataa, se generoi ilmoituksia aina kun havaitsee muutoksia elementtien – lomakkeen rakenteellisten osien – tai niiden attribuuttien – elementtejä määrittelevien tietojen – tilassa. Nämä ilmoitukset ovat keskeisiä sovelluksen tai lomakkeen dynaamisen toiminnan ja käyttäjäkokemuksen ylläpitämiseksi, sillä ne mahdollistavat muutosten välittömän päivittymisen käyttöliittymässä Erilaiset näkymämallit voivat ’tilata’ tiettyjä asiakirjan kiinnostavia alueita. MVVM-periaate mahdollistaa eri käyttöliittymäpaneelien selkeän erottamisen toisistaan, jolloin uusien komponenttien lisääminen on helppoa.
Tuotanto (Implementointi)
Sovelluksen pääkomponentit ovat:

  • Model, joka sijaitsee Document.dll -tiedostossa
  • Modifier-komennot, jotka sijaitsevat DocumentControl.dll tiedostossa.
  • Näkymämallit ja XAML-näkymät jotka sijaitsevat DocumentView.dll -tiedostossa.
  • Pääsovellus, Editor.exe (jonka ikoni lisätään yleensä käyttäjän työpöydälle), sisältää ylimmän tason ikkunan asettelun ja alustuskoodin.

Document.dll-nimellä paketoitu mallin toteutus on suunniteltu toimimaan monipuolisena SDK-komponenttina, joka helpottaa tuonti- ja vientimoduulien luomista. Tämä malli on riippumaton Windows Presentation Frameworkista (WPF), ja se voidaan jakaa laajemmin .NET Core -luokkakirjastona, mikä tekee siitä yhteensopivan useiden eri kehitysympäristöjen kanssa. Lisäksi mallin C++-versio, jossa on sisäänrakennetut XML-sarjainominaisuudet, mahdollistaa sen käytön myös .NET-ympäristön ulkopuolella, tarjoten kehittäjille entistä suuremman joustavuuden. Kehittäjille tämä malli tarjoaa merkittäviä etuja. Sen alustariippumattomuus ja erillisyys käyttöliittymästä mahdollistavat suuremman joustavuuden ja vähentävät suoria linkitysriippuvuuksia, mikä helpottaa sovellusten ylläpidettävyyttä ja skaalautuvuutta. Lisäksi erillään olevan mallin ansiosta päivitysten hallinta on helpompaa, sillä mallin päivitykset voidaan toteuttaa itsenäisesti käyttöliittymäkoodista. Käyttäjille tämä tarkoittaa parempaa ja sujuvampaa käyttökokemusta. Mallin itsenäisen päivitettävyyden ansiosta sovellukset voivat vastaanottaa päivityksiä nopeammin ja häiriöttömämmin. Tämä vähentää päivitysten aiheuttamaa käyttökatkoa ja parantaa sovellusten toimintavarmuutta ja suorituskykyä. Käyttäjät hyötyvät myös jatkuvasti päivittyvästä, entistä vakaammasta ja tehokkaammasta sovellusympäristöstä.

Integrointi esimerkki
Jos haluat käyttää asiakirjaa omassa sovelluksessasi, lisää projektiisi viittaus Document.dll -tiedostoon.
Koodi:
WS.Document.Document document;
// load the document from file
document = WS.Document.Library.Load(@"example.shape");
// print top level data items
foreach (WS.Document.DataElement item in document.Data.Children)
{
Console.WriteLine( $"{item.Name} : {item.Content}" );
}
// save the document into file
WS.Document.Library.Save(document, @"modified.shape", false);