Hirviö. Design Patterns

Samankaltaiset tiedostot
Hirviö. Design Patterns

T SEPA - päiväkirja: Design Patterns. ETL työkalu

T SEPA - päiväkirja: Design Patterns. ETL työkalu

Ohjelmistotekniikan menetelmät, suunnittelumalleja

T Henkilökohtainen harjoitus: FASTAXON

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Graafisen käyttöliittymän ohjelmointi Syksy 2013

SEPA - Design Patterns

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

SEPA päiväkirja. Aihe: Suunnittelumallit Tekijät: Tuukka Laakso ja Antti Kettunen

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VIII Suunnittelumallit Observer ja State

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

Oliosuunnittelu. Oliosuunnittelu

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy

Ohjelmistoarkkitehtuurit. Kevät

Ohjelmistoarkkitehtuurit. Syksy 2010

WWW-sivut HTML-kielellä esitettyä hypertekstiaineistoa

Hirviö Järjestelmätestauksen testitapaukset ja suoritusloki I1

Ohjelmistojen suunnittelu

Muusta kuin vesisioista

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

Järjestelmäarkkitehtuuri (TK081702)


Graafinen käyttöliittymä, osa 1

Viestinvälitysarkkitehtuurit

Ohjelmistotuotanto. Luento

Viestinvälitysarkkitehtuurit Lähtökohta:

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Ohjelmistojen mallintaminen, suunnittelumalleja

Eclipse & WindowBuilder

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

SEPA päiväkirja. Aihe: Suunnittelumallit Tekijät: Tuukka Laakso ja Antti Kettunen Ryhmä: Neptune T Ohjelmistoprojekti I

Ohjelmoinnin perusteet Y Python

Hirviö Vertaistestausraportti

Perusarkkitehtuurin ja vuorovaikutuksen mallintamisen perusteita.

Olio-ohjelmointi Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton. 1. Proxy (Edustaja)

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VI Johdanto suunnittelumalleihin

Digitaalisen median tekniikat xhtml - jatkuu Harri Laine 1

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Digitaalisen median tekniikat xhtml - jatkuu

Ohjelmistoarkkitehtuurit kevät

Written by Administrator Monday, 05 September :14 - Last Updated Thursday, 23 February :36

Ohjelmistoarkkitehtuurit Kevät käytäntöjä

Ohjelmistoarkkitehtuurit. Syksy 2008

Test-Driven Development

Ohjelmistoarkkitehtuurit kevät

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

Toiminnot eli käyttäytyminen. Tieto eli rakenteelliset ominaisuudet

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

T Tietojenkäsittelyopin ohjelmatyö Hirviöryhmä loppukatselmointi. Hirviö. Projektikatselmointi

5. Suunnittelumallit. TTY Ohjelmistotekniikka

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu

Harjoitustehtävät viikolle 42

T Hypermediadokumentin laatiminen. Sisältö. Tavoitteet. Mitä on www-ohjelmointi? Arkkitehtuuri (yleisesti) Interaktiivisuuden keinot

Johdatus rakenteisiin dokumentteihin

T Tekninen spesifikaatio

Tapahtumakalenteri & Jäsentietojärjestelmä Toteutus

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Hirviö Tekninen spesifikaatio

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

Digitaalisen median tekniikat xhtml - jatkuu

AC Hannes Statistics Tool. Ilkka Hakkarainen

T Ohjelmistojen määrittely- ja suunnittelumenetelmät Harjoitustyöraportti TNT - Tarkistetaan Ne Tentit Arkkitehtuuri- ja suunnittelumalli

Ohjelmistoarkkitehtuurit. Kevät

Ohjelmistotekniikan menetelmät, arkkitehtuuria ja rajapintoja

Ryhmäläisten nimet:

Sovellusarkkitehtuurit

Plugin-pohjaiset sovellukset arkkitehtuurit

Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö

12. Kehysarkkitehtuurit

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

9 Edistynyt PHP-ohjelmointi

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Webpalvelin muistitikulle - Ohje

Laskuharjoitus 9, tehtävä 6

INTINU13A6 Java sovellukset

Microsoft Visual Studio 2005

TIE Ohjelmistojen suunnittelu

Ohjelmistojen mallintaminen, kesä 2010

Ohjelmoinnin jatkokurssi, kurssikoe

Johdanto Javaan ja tietokantojen käsittelyyn Java Database Connectivity (JDBC)

Sisällys. Ratkaisumallien historia. Ratkaisumalli. Ratkaisumalli [2] Esimerkki: Composite [2] Esimerkki: Composite. Jaakko Vuolasto 25.1.

Ohjelmistoarkkitehtuurit Kevät käytäntöjä

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Kotopro käyttäjän ohje

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

JulkICT portaalin käyttöohje

Ohje 1 (12) Maarit Hynninen-Ojala MOODLE PIKAOHJE. Kirjautuminen Moodleen ja työtilan valitseminen

Ohjelmistoarkkitehtuurit

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

LIITTEIDEN lisääminen laskulle. Pikaohje (1.1)

Test-Driven Development

Muutamia peruskäsitteitä

Opas administraattori-tason käyttäjille. MANAGERIX -ohjelman esittely... 2 Kirjautuminen... 2

Transkriptio:

Hirviö SEPA-päiväkirja Design Patterns Anssi Kalliolahti Liia Sarjakoski 8. helmikuuta 2005 1

Sisältö 1 Johdanto 3 2 Menetelmän käytäntöön soveltaminen 3 3 Kokemuksia ja muutoksia 3 3.1 PP.......................................... 3 3.2 I1........................................... 4 3.2.1 Model View Controller........................... 4 3.2.2 Command.................................. 4 3.2.3 Chain of Responsibility.......................... 4 3.2.4 Visitor.................................... 4 3.2.5 Singleton / Factory............................. 5 3.2.6 Composite.................................. 5 3.2.7 Strategy................................... 5 3.2.8 Decorator.................................. 5 3.3 I2........................................... 5 2

1 Johdanto Tämä dokumentti on suunnittelumallien (Design Patterns) käytöstä kertova SEPA-päiväkirja, jonka tarkoituksena on esitellä, kuinka kirjoittajat ovat käyttäneet suunnittelumalleja Hirviöprojektissa. Suunnittelumallit ovat dokumentoituja ja toimiviksi todettuja ratkaisuja yleisiin suunnitteluongelmiin olio-ohjelmoinnissa. Toisin sanottuna suunnittelumallit ovat uudelleenkäytettävän suunnittelun rakennuspalikoita. Järjestelmäarkkitehti Liia Sarjakoski valitsi SEPA-aiheekseen suunnittelumallit, sillä hän oletti niiden olevan hyödyllisiä järjestelmän arkkitehtuurin suunnittelussa ja oli aikonut muutenkin tutkia niitä tarkemmin. Myös Anssi Kalliolahti on mukana Hirviön arkkitehtuurin suunnittelussa ja kokee suunnittelumallit hyödyllisiksi ja mielenkiintoisiksi. Tärkeimpänä lähteenä suunnittelumallien soveltamiseen on käytetty teosta Design Patterns: elements of reusable object-oriented software / Erich Gamma et al. Tämä teos on suunnittelumallien raamattu, katalogi, jota käytetään lähteenä useissa muissa suunnittelumalleja käsittelevissä teoksissa ja artikkeleissa. 2 Menetelmän käytäntöön soveltaminen Suunnittelumalleja käytetään Hirviön arkkitehtuurin suunnittelussa siten, että suunnittelun aikana mietitään valmiiden suunnittelumallien soveltuvuutta käsillä oleviin ongelmiin sen sijaan, että yritettäisiin keksiä kaikkiin ongelmiin ratkaisut itse. Suunnittelumalleja käytetään soveltuvilta osin, eikä arkkitehtuuria yritetä väkisin pakottaa suunnittelumallin mukaiseksi. Hirviö on jaoteltu osiin, joiden sisäinen kohensio on suuri. Nämä ovat järjestelmän moduleita (AAA, DataManagement, GUI ja sovelluslogiikka). Järjestelmä halutaan toteuttaa siten että moduleiden väliset sidokset ovat järkeviä, ja toisaalta itse moduleiden rakenteen tulee olla laajennuskelpoinen. Näiden ehtojen toteuttamiseksi tutkitaan rakenteellisia suunnittelumalleja, joiden toivotaan auttavan sekä kokonaisarkkitehtuurin että modulien sisäisen rakenteen suunnitellussa. Hirviö on sovellus, joka koostuu selkeästi HTML-käyttöliittymästä, tietokannasta ja sovelluslogiikasta. Arkkitehtuurisuunnitelijoilla on tarkoitus hyödyntää Hirviössä Model-View- Controller suunnittelumallia, jolla on ensisijaisesti tarkoitus eriyttää näkymä varsinaisesta sovelluslogiikasta. Tämä on tärkeää, koska perinteistä käyttöliittymäkoodin (XHTML) ja sovelluskoodin (PHP) sekoitusta on hankala lukea, se on heikosti ylläpidettävää ja virhealtista. Jotta MVC-mallin mukainen arkkitehtuuri olisi mahdollinen, on suunniteltava tätä tukeva alusta. Tämän suunnittelussa käytetään apuna sisäiseen käyttäytymiseen keskittyviä malleja (behavioral patterns) ja rakentamiseen keskittyviä malleja (creational patterns). Suunnittelumalleja käytetään ensisijaisesti iteraation I1 alussa, sillä järjestelmän perusarkkitehtuuri suunnitellaan silloin. Suunnittelumalleja pyritään soveltamaan myös iteraation I2 alussa arkkitehtuuriin tulevien tarkennusten osalta. On kuitenkin todennäköistä, että suunnittelumallien merkitys silloin on jo varsin pieni, ja suunnittelu keskittyy enemmän järjestelmän yksityiskohtiin. 3 Kokemuksia ja muutoksia 3.1 PP Suunnittelumalleja ei käytetty PP-iteraation aikana. 3

3.2 I1 Iteraation I1 aikana suunnittelumalleja käytettiin arkkitehtuurisuunnittelun apuna. Arkkitehtuurissa voitiin useissa kohdissa hyödyntää valmiita suunnittelumalleja ja toisaalta osan tehdyistä ratkaisuista huomattiin toteuttavan jo jonkin suunnittelumallin perusajatuksen. Suunnittelumalleihin liittyviä UML-kaavioita löytyy Hirviön teknisestä spesifikaatiosta. 3.2.1 Model View Controller Model-View-Controller -mallissa eriytetään näkymä, malli ja kontrolli. Hirviössä tämä toteutetaan siten että sovelluslogiikka toimii kontrollina, joka ottaa vastaan näkymältä saatuja käyttäjän aiheuttamia tapahtumia. Tapahtuman saatuaan Hirviö voi hakea, päivittää tai muokata mallia, joka käsittää tietokannan, sen käsittelyyn tarkoitetut luokat sekä muut väliaikaisdatan säilytykseen tarkoitetut luokat. Vastoin perinteistä MVC-mallia, Hirviössä näkymä ei suoraan hae muutoksia mallilta, vaan kontrolli välittää mahdolliset muutokset mallilta näkymälle. Tämä johtuu osittain siitä, että mallin ja näkymän välille ei haluttu suoria sidoksia, ja toisaalta siitä, että käyttöliittymän XHTML- ja PHP-kielien sekoitus haluttiin minimoida. 3.2.2 Command Hirviössä käytetään tapahtumapohjaista WWW-käyttöliittymää. Tämä on toteutettu yksinkertaisesti siten, että jokainen sovelluksen toimia vaativa input-elementti (linkit ja painikkeet) saavat automaattisesti generoidun uniikin ja satunnaisen tunnisteen, jota käytetään varsinaisessa käyttäjän selaimelle välitettävässä XHTML-sivussa. Sivun luontivaiheessa näitä uniikkeja tunnisteita vastaamaan luodaan tapahtumia, jotka enkapsuloidaan luokkaan Event, ja säilötään odottamaan käyttäjän toimia. Tälläinen toiminnon, tai komennon säilöminen luokkaan toteuttaa Command-suunnittelumallin. 3.2.3 Chain of Responsibility Jotta tapahtumilla olisi jokin merkitys on ne käsiteltävä. Kun käyttäjä painaa linkkiä tai painiketta, lähettää hän käytännössä palvelimelle vastaavan tapahtuman tunnisteen joko HTTP:n POST- tai GET-muuttujassa. Tämän tunnisteen perusteella säilötty tapahtuma voidaan ottaa käsiteltäväksi. Tätä varten järjestelmä tarjoaa abstraktin luokan, joka toimii tapahtumakuuntelijana. Tapahtumakuuntelijat voivat sisältää muita tapahtumakuuntelijoita, jolloin niistä muodostuu käytännössä puu. Lähetettävä tapahtuma ei tiedä suoraan mikä tapahtumankäsittelijä sen hoitaa, vaan se lähetetään etenemään puun juuresta, jolloin tapahtuma läpikäy kaikki tietyn haaran tapahtumakäsittelijät, kunnes se käsitellään. Tällainen käsittelijöiden ketjuttaminen toteuttaa Chain of Responsibility -suunnittelumallin. 3.2.4 Visitor Linkki- ja painike-elementtien lisäksi on XHTML:ssä tarjolla erilaisia syötteenantomahdollisuuksia kuten tekstikentät, checkboxit ja pudotusvalikot. Näiden käsittely ei aiheuta tapahtumia, mutta niiden sisältöön halutaan päästä käsiksi, ja niitä pitää pystyä päivittämään. Hirviössä tällaisten komponenttien käyttö on toteutettu siten, että niissä näkyvä data syötetään suoraan niitä esittäviin olioihin, ja vastaavasti käyttäjän antama syöte halutaan lukea suoraan niitä esittävistä olioista. Linkkien ja nappien tapaan jokainen syöte-elementti saa uniikin tunnisteen, joka välitetään käyttäjälle XHTML-sivussa. Kun käyttäjä operoi syöte-elementeillä, niihin syötetty data toimitetaan pavelimelle HTTP:n POST-muuttujissa, jotka on nimetty annetulla tunnisteella. 4

Jotta syöte saadaan takaisin haluttuihin olioihin, on niihin lisätty joukko visitor -metodeja joilla dataa voidaan operoida. Kun elementti luodaan ruudulle, se kutsuu alustan syötteenhallintaoliota saadakseen uniikin tunnisteen. Kutsuessaan tätä olioita, jokainen inputelementti antaa syötteenhallintaoliolle viittauksen itseensä, jolloin syötteenhallintaolio voi tätä viittausta ja visitor -metodeja hyväksikäyttäen operoida elementin datalla. 3.2.5 Singleton / Factory Jotta kaikkien syöte-elementtien tunnisteet olisivat yksilöllisiä ja niitä voitaisiin järkevästi hallita, tarvitaan keskitetty palvelu. Koska tämä keskitetty palvelu sijaitsee abstraktisti ajateltuna puun juuressa ja palvelua käyttävät elementit lehdissä, ei viittausta palveluun haluta välittää läpi puun haarojen. Hirviössä tämä palvelu toteutetaan staattisena luokkana, jonka ainoaa suorituksenaikaista instanssia voi käsitellä luokan staattisten metodien välityksellä. Luokan konstruktorista on tehty privaatti, jolloin sitä ei voida luoda, vaan luokka luo itse ainoan instanninsa, kun sen staattisia metodeja ensi kerran kutsutaan. Tällainen yhden instanssin luokka toteuttaa Singleton-suunnittelumallin. Tämä palvelu toimii samalla myös luokkana, joka luo jokaista toiminnon aiheuttavaa syöteelementtiä vastaavan tapahtumaolion, ja säilöö sitä niin pitkään kuin elementti on olemassa (kahden sivupyynnön välisen ajan). Tällainen toisia olioita tuottava luokka toteuttaa suunnittelumallin Factory. 3.2.6 Composite Hirviön käyttöliittymä on luonteeltaan sellainen, josta löytyy paljon uudelleenkäytettäviä elementtejä, kuten esimerkikis päävalikko. Näistä elementeista luodaan omia luokkia, joita voi yhdistellä. Hirviön käyttöliittymä koostuukin sisäkkäisistä elementeistä, joista muodostuu puumainen rakenne. Puussa olevia elementtejä voidaan hallita tarvittaessa isäelementtiensä avulla. Tälläinen yhdistely toteuttaa Composite-suunnittelumallin. 3.2.7 Strategy Strategy-mallia on käytetty mahdollistamaan erilaisten todennusmenetelmien ja tietokantojen käyttö järjestelmässä. Eri todennusmenetelmillä on yhteinen rajapinta siten, että mitä tahansa menetelmää voidaa käyttää sen kautta. Eri todennusmenetelmät ovat siis vaihdettavissa keskenään. Käytettävä menetelmä valitaan käyttäjän asetuksien mukaan. Järjestelmä voi käyttää myös erilaisia SQL-tietokantaohjelmistoja vastaavalla menettelyllä, mutta luonnollisesti vain yhtä kerrallaan ja vain niin kauan kuin SQL-lauseet tuottavat kaikilla tietokannoilla saman lopputuloksen. Ratkaisu eroaa puhtaasta Strategy-mallista siten, että Context käyttämisen lisäksi myös luo tarvitsemansa Strategyn. Context ja Strategy ovat Strategy-mallin käsitteitä. 3.2.8 Decorator Decorator on suunnittelumalli, jolla täydennetään jo olemassaolevaa luokkaa. Hirviössä tietokantayhteydet hoidetaan DatabaseConnection -rajapinnan toteuttavien luokkien avulla. Sovelluslogiikan tasolla ei kuitenkaan haluta käyttää suoraan SQL:ää, joten DatabaseConnection -luokkaa luodaan täydentämään DataManager-luokka, joka abstraktoi SQL:n pois sovelluslogiikan näkyvistä. 3.3 I2 Järjestelmän arkkitehtuuri suunniteltiin kokonaisuudessaan iteraation I1-aikana. Iteraatiolla I2 arkkitehtuuriin ei tehty mitään muutoksia, jolloin myös käytetyt suunnittelumallit pysyivät muuttumattomina. 5

Kierroksen aikana oli tarkoitus implementoida varsinainen sovellus, käyttäen hyväksi kierroksella I1 valittuja ratkaisuja. Näiden ratkaisujen soveltuvuus havaittiin hyväksi, eikä alustaan kaivattu mitään muutoksia. SEPA-pari on tyytyväinen tekemiinsä valintoihin. Käytettyjen suunnittelumallien soveltuvuutta pyritään tarkemmin analysoimaan vasta viimeisellä iteraatiolla, jolloin sovellus on valmis, sekä kaikki mahdolliset kokemukset (tämän projektin puitteissa) ovat käytössä. 6