FM2: loetelu ja detailinfo

Mustri tüüp: funktsionaalne muster
Peamine kasusaaja:
inimene
Eesmärk
: andmete pärimine
Allikas
: teadaolev praktika
Teenuste arv:
2

Abstract

FM2: Summary list and details is used when the service consumer needs detailed information of a specific record, but does not know exactly which record that is. It is mostly used in human guided processes or when the entire dataset is too large to query and process at once.

The pattern proposes developing two services based on the primitive "PM1: Data pull service". The first service will be used to query general information (limited number of fields) about all the records. The second service will be used to query detailed information (all fields) about a specific record.

In the context of this pattern:

  • The service producer is the information system that has the needed data;
  • The service consumer is the information system that needs the data.

Sissejuhatus

Muster kirjeldab üle X-tee andmete pärimise ühte erijuhtu, kus andmete pärimiseks kasutatakse kahte omavahel seotud X-tee teenust. Nendest teenustest esimest kasutatakse kirjete üldandmete (olulisemate andmeväljade) pärimiseks ja teist kasutatakse konkreetse kirje detailandmete (kõigi andmeväljade) pärimiseks. Mõlemad teenused tuginevad primitiivile "PM1: andmete päringu teenus".

Andmete pärimise eesmärgil luuakse kaks X-tee teenust, mille korral eristame kahte poolt:

  • andmeid omav infosüsteem:
    • teenuse osutaja;
    • infosüsteem, kus toimub andmete kogumine ja muutmine;
  • andmeid vajav infosüsteem:
    • teenuse tarbija;
    • infosüsteem, mis kasutab andmeid omava infosüsteemi andmeid oma äriprotsessis.

Probleem

Käesolev muster sobib kasutamiseks olukorras, kus on vajalik lahendada andmete vahetus sissejuhatuses nimetatud poolte vahel ning:

  • andmeid vajava infosüstemi äriprotsessi läbiviijaks on inimkasutaja;
  • andmete maht on liiga suur nende korraga pärimiseks ja kasutajale esitamiseks;
  • enne kirjetest ülevaate saamist ei ole kasutajal teada millise kirje detailandmeid ta soovib pärida
  • andmeid vajava infosüsteemi käideldavus on tagatud ainult andmete pärimise hetkel;
  • andmeid omava infosüsteemi käideldavus on tagatud alati, kui keegi soovib andmeid pärida;
  • andmeid vajaval infosüsteemil peab olema kontroll selle üle, millal andmevahetus toimub;
  • päritud andmete ajakohasena hoidmise eest vastutab andmeid vajav infosüsteem.

Lahendus

Antud probleemi lahendusena on mõistlik luua infosüsteemis kaks X-tee teenust. Nendest esimese väljund sisaldab kirjete ülevaadet, kus on ainult kirjete olulisemad andmeväljad. Teine teenus tagastab kasutaja poolt välja valitud kirje kõik andmeväljad. Mõlema teenuse korral on tegu sisuliselt mustriga "PM1: andmete päringu teenus".

Andmeid omavas infosüsteemis:

  • kirjeldatakse kaks X-tee teenust:
    • teenus kirjete üldandmete (olulisemate andmeväljade) pärimiseks;
    • teenus konkreetse kirje detailandmete (kõigi andmeväljade) pärimiseks;
  • iga teenuse kohta:
    • arendatakse teenuse sisendi valideerimine;
    • arendatakse teenuse sisendi põhjal vajalike andmete leidmine
    • arendatakse teenuse väljundi koostamine;
    • määratakse infosüsteemid, mis võivad teenust kasutada.

Andmeid vajavas infosüsteemis:

  • iga teenuse kohta:
    • arendatakse teenuse sisendiks olevate parameetrite määramine;
    • arendatakse teenuse sisendi koostamine;
    • arendatakse andmeid omava infosüsteemi poolt osutatava X-tee teenuse tarbimine;
    • arendatakse teenuse väljundi töötlemine ja salvestamine.
  • kirjete üldandmete kuvamine;
  • konkreetse kirje valimine;
  • kirje detailandmete kuvamine;

Teenuste kirjeldus

Teenuste juures on oluline märkida, et kirjete üldandmete pärimiseks kasutatava teenuse väljund peab sisaldama iga kirje kohta unikaalset identifikaatorit. See identifikaator on vajalik kirje detailandmete pärimise teenuse sisendina.

Loodavate teenuste WSDL näiteid ei ole toodud, sest mõlema teenuse korral on WSDL analoogne primitiivile "PM1: andmete päringu teenus".

Mustri käitumine

Järgneval joonisel esitatakse andmeid vajava infosüsteemi (teenuse tarbija) ja andmeid omava infosüsteemi (teenuse osutaja) vaheline suhtlus.


Joonis 4.2 Mustri FM2 järgnevusdiagramm.

Infosüsteemi spetsiifilise äriloogika esitamiseks on viidatud järgnevusdiagrammile "Infosüsteemi äriprotsess", mille sisu ei ole toodud kuna see sõltub konkreetse infosüsteemi äriprotsessist.

Joonise lihtsustamiseks on jooniselt välja jäetud teenuste sisendi ja väljundi koostamise ning valideerimisega seonduvad tegevused.

Andmeid vajava infosüsteemi poolel on eristatud äriloogika ja teenusloogika kihid.

  • Äriloogika kiht:
    • täidab infosüsteemi spetsiifilist äriprotsessi;
    • pärib kirjete üldinfo;
    • valib kirjete üldinfost huvipakkuva kirje;
    • pärib huvipakkuva kirje detailsed andmed
    • töötleb kirjete üldinfo ja huvipakkuvate kirjete detailseid andmeid vastavalt infosüsteemi äriprotsessile.
  • Teenusloogika kiht:
    • tarbib andmeid omava infosüsteemi poolt osutatavaid teenuseid;
    • võtab vastu tarbitud teenuste vastused;
    • tõlgendab vastuses sisalduvad andmed äriloogika kihile sobivaks;
    • teavitab äriloogika kihti teenuse kasutuse tulemustest.

Andmeid omava infosüsteemi juures toimuvad tegevused on lahendatud teenusloogika kihis. Teenusloogika kihis toimuvad järgmised tegevused:

  • võetakse vastu teenuse sisend;
  • valideeritakse teenuse sisendis olevad päringu parameetrid;
  • leitakse päritavad andmed vastavalt päringu parameetritele;
  • koostatakse päritavaid andmeid sisaldav teenuse vastus.

Kasutusliideses esitatakse kirjete üldandmed tavaliselt tabelina, mille ridu saab kasutaja avada. Rea avamisel päritakse vastava kirje detailsed andmed ning selle päringu kuvatakse tavaliselt vormina.

Lisakaalutlused

Käesoleva mustri kasutamisel tuleks silmas pidada järgnevat:

  • põhimõtteliselt on mõlemad mustri teenused kasutatavad ka eraldiseisvatena;
  • mustri toimimiseks peab teenuse osutaja avama mõlemad teenused teenuse tarbijale;
  • kirje unikaalse identifikaatorina tuleks võimalusel kasutada identifikaatorit (näiteks isikukood, auto numbrimärk jne).

Näide

Näitena on toodud Tallinna lemmikloomaregister. Täpsemalt teenused "tlnkoer.omanikuloomad" ja "tlnkoer.vaatamine". Nendest esimene annab ülevaate kõigist omaniku lemmikloomadest ja teine annab konkreetse looma detailsed andmed.

Näites toodud teenuste kooskasutus on toodud järgneval selgitaval joonisel.


Joonis 4.3 Teenuste "tlnkoer.omanikuloomad" ja "tlnkoer.vaatamine" kooskasutus.


Teenuse "tlnkoer.omaniku_loomad" korral on mustri seisukohast oluline ainult väljund. Väljundis sisalduv väli "loom_id" on teenuse "tlnkoer.vaatamine" sisendiks.

keha (type: omaniku_loomad_vastus)
|-> faultCode (type: String)
|-> faultString (type:String)
|-> omanik (type: Omanik, description: “Looma omanik”)
| |-> telefon (type: String, description: “Omaniku telefon”)
| |-> e_mail (type: String, description: “Omaniku e-mail”)
| |-> aadress (type: String, description: “Omaniku elukoha aadress”)
| |-> muuda_link (type: String, description: “Omaniku andmete muutmise link”)
|-> Looma omanik (type: Lemmikloomad, description: “Kõik omaniku loomad”)
| |-> item (type: Array of items)
| |-> nimi (type: String, description: “Looma nimi”)
| |-> liik (type: String, description: “Looma liik”)
| |-> toug (type: String, description: “Looma tõug”)
| |-> looma_staatus (type: String, description: “Looma staatus”)
| |-> vaktsiin_viimane (type: String, description: “Viimati vaktsineeritud”)
| |-> surmaaeg (type: String, description: “Looma surmaaeg”)
| |-> surm_pohjuse (type: String, description: “Looma surma põhjus”)
| |-> loom_id (type: String, description: “Looma unikaalne identifikaator”)
| |-> paranda_link (type: String, description: “Looma surmaandmete muutmise lin”)
|-> registreerimine (type: Registreerimine, description: “Uue kiibitud looma registreerimine”)
|-> lisa_link (type: String, description: “Uue kiibitud looma registreerimise link” )

Teenuse "tlnkoer.vaatamine" sisendiks on teenuse "tlnkoer.omaniku_loomad" väljundis sisalduv väli "loom_id".

keha
|-> vaatamine_paring
|-> loom_id (type: Integer, description: “Looma unikaalne identifikaator”)



Last modified: Monday, 24 October 2016, 1:26 PM