Oppimistavoitteet. Ohjelmistoarkkitehtuurin suunnittelu. Referenssejä L. Bass, P. Clements, R. Kazman: I. Mistrik, A. W. Brown, M. Ali Babar 8.9.

Samankaltaiset tiedostot
Ohjelmistoarkkitehtuurin suunnittelu

Ohjelmistoarkkitehtuurin suunnitteluperiaatteita

Ohjelmistoarkkitehtuurit, syksy

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistoarkkitehtuurit. Syksy 2010

Ohjelmistoarkkitehtuurit. Kevät

Ohjelmistoarkkitehtuurit. Syksy 2008

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Suunnitteluvaihe prosessissa

3. Komponentit ja rajapinnat

Ohjelmistoarkkitehtuurit. Syksy 2007

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Arkkitehtuurien tutkimus Outi Räihä. OHJ-3200 Ohjelmistoarkkitehtuurit. Darwin-projekti. Johdanto

Koodimalli Code Model

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

Ohjelmistojen mallintaminen kertausta Harri Laine 1

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

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Arkkitehtuurin mallintaminen

Ohjelmistojen suunnittelu

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

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

LUKU 5: SUUNNITTELU. Suunnitteluun liittyviä käsitteitä:

Muutamia peruskäsitteitä

Ohjelmistoarkkitehtuurit kevät

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

SEPA - Design Patterns

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Uudelleenkäytön jako kahteen

Ohjelmistoarkkitehtuurit Komponentit Kevät 2014

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Ohjelmistoarkkitehtuurit Kevät 2016 Johdantoa

Helia Ohjelmointitaito Tuomas Kaipainen Mermit Business Applications Oy Mermit Business Applications

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Ohjelmistojen mallintaminen, mallintaminen ja UML

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Arkkitehtuurin mallintaminen

Virtualisointiympäristössä on kolme pääosaa: isäntä (host), virtualisointikerros ja vieras (guest).

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

Ohjelmistojen mallintaminen

Oppimistavoitteet. Arkkitehtuurin mallintaminen. Malleista ja niiden käytöstä. Malleista ja niiden käytöstä. Kommutatiivinen kaavio 22.9.

Joskus yleistäminen voi tapahtua monen ominaisuuden pohjalta. Myös tällöin voi tulla moniperintätilanteita.

Järjestelmäarkkitehtuuri (TK081702)

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

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

Tietokantasovellus (4 op) - Web-sovellukset ja niiden toteutus

HELIA 1 (14) Outi Virkki Käyttöliittymät ja ohjlmiston suunnittelu

Ohjelmistotuotteen hallinnasta

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

P e d a c o d e ohjelmointikoulutus verkossa

Ylläpito. Ylläpito. Ylläpidon lajeja Ohjelmistotuotanto, syksy 1998 Ylläpito

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

11/20: Konepelti auki

Siltatiedon tarkkuustason määrittäminen Taitorakennerekisterissä. Maria Vinter

12. Kehysarkkitehtuurit

HELIA 1 (17) Outi Virkki Tiedonhallinta

Linux rakenne. Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat

6. Arkkitehtuurityylit

Tyyppiluokat II konstruktoriluokat, funktionaaliset riippuvuudet. TIES341 Funktio-ohjelmointi 2 Kevät 2006

Web Services tietokantaohjelmoinnin perusteet

Ohjelmistojen mallintaminen Ohjelmistoarkkitehtuuri Harri Laine 1

Olio-ohjelmointi Javalla

Ylläpito. Ylläpidon lajeja

P e d a c o d e ohjelmointikoulutus verkossa

Kertaus: yleistys-erikoistus ja perintä

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

Ohjelmistoarkkitehtuurit kevät

A TIETORAKENTEET JA ALGORITMIT

Ohjelmistoarkkitehtuurit

Komponentit ja rajapinnat

6. Arkkitehtuurityylit

2. Olio-ohjelmoinnin perusteita 2.1

Testaaminen ohjelmiston kehitysprosessin aikana

Käyttöliittymät II. Käyttöliittymät I Kertaus peruskurssilta. Keskeisin kälikurssilla opittu asia?

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Software engineering

Tietokantasuunnittelun pääperiaatteena on tiedon toiston välttäminen. Tiedon toistumiseen liittyy monenlaisia ongelmia.

Ohjelmistojen laadun parantaminen refaktoroinnilla Simo Mäkinen Tietojenkäsittelytieteen laitos Helsingin yliopisto

Ohjelmistojen mallintaminen, kesä 2009

Ohjelmistoarkkitehtuurit kevät

Palveluperustaiset arkkitehtuurityylit

JHS 179 ICT-palvelujen kehittäminen: Kokonaisarkkitehtuurin kehittäminen Liite 2 Arkkitehtuurikehyksen kuvaus

Arkkitehtuurityylejä ja patterneja


Kehyspohjainen ohjelmistokehitys

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

HELIA 1 (17) Outi Virkki Tiedonhallinta

Oppimistavoitteet. Arkkitehtuurityylejä ja patterneja. Tyylien ja patternien käytöstä. Kolmitasoarkkitehtuuri (N-Tier) Kolmitasoarkkitehtuuri (N-Tier)

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Arkkitehtuurin dokumentointi O A

Luento 8. Ohjelmistokehykset Tuoteperheet CSM14101 Ohjelmistoarkkitehtuurit

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

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit Johannes Koskinen. Osittavat arkkitehtuurityylit

812341A Olio-ohjelmointi, I Johdanto

Vesisika. metsiemme työmyyrä.

Transkriptio:

Oppimistavoitteet Ohjelmistoarkkitehtuurin suunnittelu Luento 3 Arkkitehtuuritietämyksen lähteet Yleisiä suunnitteluperiaatteita Kaunis arkkitehtuuri 8.9.2015 581358 Ohjelmistoarkkitehtuurit 1 8.9.2015 581358 Ohjelmistoarkkitehtuurit 2 Ohjelmistoarkkitehtuuritiedon lähteillä ARKKITEHTUURITIEDON LÄHTEET Yhdellä (yliopisto-) kurssilla ei kenestäkään kouluteta ohjelmistoarkkitehtia Ohjelmistoarkkitehdiksi kasvetaan kokemuksen ja haastavien tehtävien kautta Muitten kokemuksesta voi kuitenkin ottaa oppia ja kehittää tietojaan ja suunnittelutaitojaan Arkkitehtuurityylit ja -patternit Yleiset ohjelmistojen suunnitteluperiaatteet Laatuominaisuuksien suunnittelutaktiikat Kokemusraportit ja kuvaukset onnistuneista ja epäonnistuneista kehitysprojekteista (blogit, kirjat) 8.9.2015 581358 Ohjelmistoarkkitehtuurit 3 8.9.2015 581358 Ohjelmistoarkkitehtuurit 4 D. Spinellis, G. Gousios: Referenssejä L. Bass, P. Clements, R. Kazman: I. Mistrik, A. W. Brown, M. Ali Babar O Reilly, 2009 Addison-Wesley Prof., 2012 Elsevier /Morgan Kaufmann, 2013 Grady Booch: http://handbookofsoftwarearchitecture.com(?) (katso: Books) 8.9.2015 581358 Ohjelmistoarkkitehtuurit 5 ARKITEHTUURITYYLIT JA - PATTERNIT 8.9.2015 581358 Ohjelmistoarkkitehtuurit 6 1

Arkkitehtuurityyli Architectural style Nimetty kokoelma tiettyyn käyttöyhteyteen soveltuvia yleisiä suunnitteluperiaatteita ja sääntöjä, jotka tuovat mukanaan hyödyllisiä ominaisuuksia rakennettavaan järjestelmään Esim. asiakas palvelin tyyli (Client-Server): Erottele palvelua pyytävä ja palvelun tarjoava ohjelmistokomponentti Piilota palvelua pyytävien komponenttien identiteetti palvelun tarjoajalta ja mahdollista useiden pyytäjien mahdollisesti vaihtelevan joukon palveleminen Eristä pyytäjät toisistaan Mahdollista useita palvelun tarjoajia; ja mahdollista tarjoajien määrän dynaaminen (käytön aikainen) lisääminen asiakkaiden määrän vaihtelun mukaan Arkkitehtuuripatterni (tai malli) Architectural pattern Nimettykokoelma johonkin toistuvaan suunnitteluongelmaansoveltuvia suunnitteluratkaisuja, jotka on parametrisoitu ottamaan huomioon käyttöyhteys, jossa ongelma esiintyy Miten tyyli eroaa patternista? Tyylin käyttötilanne on yleisempi, patternin spesifimpi Tyylit ovat enemmän periaatesääntöjä ja patternit konkreettisia ratkaisuja Patternit soveltavat tyyliä (tyylejä) Patterniinvoidaan yhdistää tyylejä. Tietty tyyliä noudattava ratkaisu voi sisältää useita patterneja. Huom - Kaikki lähteet eivät erottele näitä käsitteitä! 8.9.2015 581358 Ohjelmistoarkkitehtuurit 7 8.9.2015 581358 Ohjelmistoarkkitehtuurit 8 Tyyli ja patterni Kolmitasoarkkitehtuuri Esimerkki: Kolmitasoarkkitehtuuri patterni Asiakaskerros request request front middle back reply reply Web- ja sovelluspalvelin Web-palvelin Sovelluspalvelin Tilausjärjestelmä Sovelluskerros Asiakas palvelin tyyli Tietokantapalvelin Tilaustietokanta Datakerros 8.9.2015 581358 Ohjelmistoarkkitehtuurit 9 8.9.2015 581358 Ohjelmistoarkkitehtuurit 10 Tyylien käytöstä Muitten jäljittely ja suunnittelun uudelleenkäyttö on hyvä oppimismenetelmä Kun käyttää tyylejä ja ratkaisumalleja, on kuitenkin syytä ymmärtää miksi ja missä tilanteissa ne toimivat ja verrata tätä omaan käsillä olevaan suunnitteluongelmaan Joukko tyylejä ja malleja käydään läpi seuraavilla luennoilla YLEISET SUUNNITTELUPERIAATTEET 8.9.2015 581358 Ohjelmistoarkkitehtuurit 11 8.9.2015 581358 Ohjelmistoarkkitehtuurit 12 2

Yleiset suunnitteluperiaatteet Abstraction, Encapsulation, Inofrmation Hiding, Modularization, Separation of Concerns, Coupling and Cohesion, Sufficiency-Completeness-Primitiveness, Separation of Policy and Implementation, Single Point of Reference, Divide-and-Conquer Katso esimerkiksi Luku 6.3 Enabling techniques for software architecture teoksessabuschmann F. & al.: Pattern-Oriented Software Architecture, vol. 1. Wiley, 2001 Wikipedia http://en.wikipedia.org/wiki/list_of_software_developme nt_philosophies 8.9.2015 581358 Ohjelmistoarkkitehtuurit 13 Information Hiding Parnas, D.: On the Criteria to Be Used in Decomposing Systems Into Modules. Comm. ACM 15(12), 1972 Ohjelmisto jaetaan moduuleihin* siten, että kukin moduuli kätkee jonkin todennäköisesti muuttuvan teknisen tai sovellusalueen piirteen toteutuksen (= suunnittelupäätökset) Moduuli tarjoaa palveluihinsa vakaan abstraktin rajapinnan, joka ei paljasta toteutuksen yksityiskohtia (~abstrakti tietotyyppi) * ) Moduuli (hist.) = ohjelman toteutuksen osa, joka sisältää yhteen kuuluvia elementtejä, esim. Java-pakkaus ja sen luokat. Staattinen rakenneosa (koodia, konf. tiedostoja tms.). 8.9.2015 581358 Ohjelmistoarkkitehtuurit 14 Information Hiding Kun moduulin kätkemät suunnittelupäätökset muuttuvat, moduulien käyttäjiä ei tarvitse muuttaa, koska ne riippuvat vain samana pysyvästä rajapinnasta Useimmat ohjelmistokehittäjät pitävät itsestäänselvyytenä, että rajapinta (esim. Java-olion) ei paljasta olion toteutuksen yksityiskohtia Kentät merkitään yksityisiksi (private), mutta määritellään niille julkiset get() ja set() metodit Harvempi kuitenkaan tulee ajatelleeksi odotettavissa olevia muutoksia ja muutosten heijastusvaikutusten ennalta ehkäisemistä ohjelmiston modularisoininnin avulla Arkkitehdin työn kuvaan tällaisen ajatteleminen kuitenkin kuuluu Muutostarpeita voi tosin olla vaikea arvata etuketään Tähän ongelmaan tepsii, paitsi oikein tehty olioperustainen suunnittelu, seuraavalla dialla esitelty periaate Separation of Concerns Erilaiset tai yhteenkuulumattomat vastuut (responsibilities) on erotettava toisistaan ohjelmistossa Jaettava eri komponenteille Vastuu: jotakin mitä komponentti tekee tai tietää tai piilottaa muilta (toiminto, riippuvuus, data, ) Tietyn tehtävän yhteistyössä suorittavat komponentit on pidettävä erillään komponenteista, jotka suorittavat muita tehtäviä Jos komponentilla on useita rooleja eri tilanteita ja käyttöyhteyksiä varten, roolit on pidettävä itsenäisinä ja erillään komponentin sisällä 8.9.2015 581358 Ohjelmistoarkkitehtuurit 15 8.9.2015 581358 Ohjelmistoarkkitehtuurit 16 Miten suunnitteluperiaatteet ilmenevät tässä arkkitehtuurissa? Web- ja sovelluspalvelin Web-palvelin Tilausjärjestelmä Tietokantapalvelin Tilaustietokanta Sovelluspalvelin Asiakaskerros Sovelluskerros Datakerros 8.9.2015 581358 Ohjelmistoarkkitehtuurit 17 Coupling Kytkentä (coupling) on moduulien välisen assosiaation voimakkuuden mittari Voimakas kytkentä tekee moduulit vaikeammin ymmärrettäväksi, muutettavaksi ja korjattaviksi toisistaan riippumatta Esimerkiksi jos moduulin A luokka A.A pääsee suoraan käsiksi moduulin B luokan B.B toteutukseen (sen kenttiin), syntyy hyvin voimakas kytkentä, koska B.B:n toteutukseen tehtävä muutos todennäköisesti heijastuu välittömästi muutostarpeena A.A:n koodin, joka käsittelee suoraan B.B:n kenttiä Mittarille on tekninen määritelm(i)ä, mutta asian ydin on miettiä, millaisia heijastusvaikutuksia jonkin moduulin sisäisillä muutoksilla on muihin moduuleihin ja pyrkiä minimoimaan ne https://en.wikipedia.org/wiki/coupling_%28computer_programming%29 8.9.2015 581358 Ohjelmistoarkkitehtuurit 18 3

Suoralla y = a voi x:n valita vapaasti Jos x:n valinta ei vaikuta y:n arvoon ja päinvastoin, niin ominaisuudet (x ja y) ovat toisistaan riippumattomia Suunnittelussa ja arkkitehtuurissa: Moduulien / komponenttien välisen keskinäisen riippumattomuuden mitta Ortogonaalisuus 8.9.2015 581358 Ohjelmistoarkkitehtuurit 19 Y (0,a) (b,0) x=b y = a X Cohesion Moduulin sisältämien elementtien yhteenkuuluvuuden (cohesion) mittari Yhteenkuuluvuuden eri asteita Toiminnallinen (hyvä!): kaikki moduulin elementit toimivat yhdessä jonkin tietyn, rajallisen tehtävän toteuttamiseksi (well-bounded behavior) Sattumanvarainen (huono!): moduuli on satunnainen kokoelma yhteenkuulumattomiaabstraktioita ja toimintoja Asteita on muitakin, mutta oleellista on miettiä, (1) mikä on moduulin päätehtävä ja (2) miten sen elementit liittyvät tuon tehtävän suorittamiseen Voiko jotkut elementit siirtää pois moduulista sen päätehtävän toteuttamisen kärsimättä? https://en.wikipedia.org/wiki/cohesion_%28computer_science%29 8.9.2015 581358 Ohjelmistoarkkitehtuurit 20 By NASA (Stardust Launch Press Kit [1]) [Public domain], via Wikimedia Commons JÄRJESTELMÄN JAKAMINEN OSIIN https://commons.wikimedia.org/wiki/file%3astardust_-_launch_vehicle_assembly_diagram.png 8.9.2015 581358 Ohjelmistoarkkitehtuurit 21 8.9.2015 581358 Ohjelmistoarkkitehtuurit 22 "Legpuzzel" by Piero from nl. Licensed under CC BY-SA 3.0 via Wikimedia Commons https://commons.wikimedia.org/wiki/file:legpuzzel.jpg#/media/file:legpuzzel.jpg Kokonaisuus koostuu osista Oletusarkkitehtuuri (esim. ohjelmistokehys, framework) antaa valmiin kaavan, joka jakaa rakennettavan järjestelmän * loogisesti ja fyysisesti erillisiin, tietyn rajatun tehtävän tai tarkoituksen täyttäviin rakenneosiin (moduulit, komponentit jne.) Arkkitehtuurityylit ja patternit tarjoavat suoraan lähtökohtia järjestelmän suunnittelulle ja ositukselle Yleiset suunnitteluperiaatteet antavat ohjenuoria ja mittareita, jotka auttavat osituksessa ja sen arvioinnissa Mitä muita tapoja on osittaa järjestelmä ja sen arkkitehtuuri? 8.9.2015 581358 Ohjelmistoarkkitehtuurit 23 (*) SUD = System Under Design 8.9.2015 581358 Ohjelmistoarkkitehtuurit 24 4

Divide & Conquer: yhteinen piirre useimmille hyvin suunnitelluille järjestelmille on hierarkisuus, jossa ylempien tasojen tarkasteluissa alempien tasojen rakenneosia (elementtejä) voidaan käsitellä mustina laatikkoina (information hiding) välittämättä niiden sisäisestä rakenteesta Sama toistuu rekursiivisesti alemmilla tasoilla Yleinen ositusstrategia 1. Muodosta abstraktioiden hierarkia, jossa ylempien tasojen elementit (komponentit, moduulit) koostuvat alempien tasojen elementeistä 2. Rajoita elementtien määrä kullakin tasolla korkeintaan muutamaan kymmeneen 3. Jokaisella elementillä on oltava selkeä ja hyvin perusteltu olemassaolon tarkoitus 4. Noudata tiedon kätkemisen ja kapseloinnin periaatteita (information hiding, encapsulation) niin, että elementit eivät tarpeettomasti paljasta sisäistä toteutustaan 8.9.2015 581358 Ohjelmistoarkkitehtuurit 25 8.9.2015 581358 Ohjelmistoarkkitehtuurit 26 Erityisiä osituksia Yleinen strategia ei ota kantaa siihen, miten hierarkinen ositus oikein löydetään Jotta järjestelmän arkkitehtuuri pysyy ymmärrettävänä ja hallittavana, on yleensä syytä valita yksi vallitseva ositusstrategia, jota pyritään johdonmukaisesti noudattamaan Kurssikirjassa Fairbanks esittää seuraavat erityiset ositusstrategiat Jako toiminnallisuuden mukaan Tarkastellaan, mitä kaikkea järjestelmän pitää tehdä (toiminnallisuus) Yhteenkuuluva toiminnallisuus yhteen elementtiin tai samalla hierarkian tasolla läheisessä yhteistoiminnassa oleviin elementteihin Toiminnallisuuksien jaottelu joko teknisen luonteen tai toiminnan tarkoituksen (sovellusalueen prosessien) perusteella 8.9.2015 581358 Ohjelmistoarkkitehtuurit 27 8.9.2015 581358 Ohjelmistoarkkitehtuurit 28 Jako arkkityyppien mukaan Arkkityyppi (archetype) tarkoittaa jotakin sovellusalueen keskeistä käsitettä, esimerkiksi tietomallissa esiintyvää pysyväisluontoista oliota Jako arkkitehtuurityylin mukaan Tämä onkin jo tuttua huttua Jako tiettyjen laatuvaatimusten saavuttamiseen tähtäävien suunnittelutaktiikoiden perusteella (Quality) Attribute Driven Design Eri laatuattribuutteja varten on omat taktiikkansa Jako järjestelmän sisältämien rajapintojen ja palvelujen mukaan Jokaista palvelua/rajapintaa kohden yksi sen implementoiva komponentti Yksi komponentti per palvelu ei useinkaan riitä, mutta tällä pääsee liikkeelle Palapeli Kokonaisuus sovitellaan jo olemassaolevista (toteutetuista) elementeistä erilaisilla sovittimilla ja liimakomponenteilla Käytännössä yleinen ratkaisu laajoissa yritysjärjestelmissä, jossa harvoin päästään puhtaalta pöydältä liikkeelle 8.9.2015 581358 Ohjelmistoarkkitehtuurit 29 8.9.2015 581358 Ohjelmistoarkkitehtuurit 30 5

Ongelman uudelleenmuotoilu toisen sovellusalueen käsittein ja valmiin osituksen käyttö Joskus voi olla mahdollista pukea suunnitteluongelma jonkin toisen sovellusalueen vaatimaan muotoon ja käyttää tälle alueelle suunniteltua ositusta Esimerkiksi järjestelmän näkeminen sovellusalueen olioiden muodostaman suunnattuna verkkona ja yleisten verkkoalgoritmien käyttöä toimintojen toteutukseen KAUNIS ARKKITEHTUURI 8.9.2015 581358 Ohjelmistoarkkitehtuurit 31 8.9.2015 581358 Ohjelmistoarkkitehtuurit 32 Kaunis arkkitehtuuri Stephen J. Mellor, teoksessa Beautiful Arhcitecture. D. Spinellis, G. Gousios (eds.). O Reilly, 2009. One fact in one place Pyritään lokalisoimaan useassaeri yhteydessä tarvittava data tai toiminnallisuus yhteen ainoaan paikkaan Automatic propagation Lokalisoidun faktan kopiointi suoritusaikana käyttökontekstiinsa on joskus tarpeen (saman komponentin instantiointija konfigurointi eri palveluissa) Tämän pitäisi tapahtua automaattisesti ja työkalun tukemana (esim dependency injection) Architecture includes construction Ohjelmiston koostaminen ja rakentaminen (build) pitää ottaa huomioon arkkitehtuurissa Esimerkiksi reflektio on voimakas mekanismi, jota kannattaa hyödyntää paitsi suoritusaikana myös suoritettavaa ohjelmaa koostettaessa (esim. conventionover configuration-periaate) Minimizemechanisms Periaatteessa saman asian tekevien hieman erilaisten mekanismien määrä karsittava minimiin (-> 1 kpl) Riittävän hyvä ratkaisu kertaalleen toteutettuna on parempi kuin kymmenen erillistä joka tilanteeseen parasta ratkaisua ( vrt. conceptual integrity) Kaunis arkkitehtuuri Construct engines Moottori on virtuaalikone, joka tarjoaa geneerisen rajapinnan palveluihinsa Rajapinnan palvelut eivät suoraan vastaa sitä käyttävien komponenttien toteuttamia käyttötapauksia vaan ovat luonteeltaan niitä primitiivisempiä ja yleiskäyttöisempiä Yleistä kerrosarkkitehtuureissa O(G), the order of growth Ota huomioon järjestelmän todennäköinen kasvu Se mikä toimii pienessä järjestelmässä, ei välttämättätoimiisommassa Resist entropy Pyri pitämään arkkitehtuuri eheänä ja kirkkaana järjestelmän koko elinkaaren ajan (vältä rikottuja ikkunoita ) Työkaluilla on tärkeä rooli 8.9.2015 581358 Ohjelmistoarkkitehtuurit 33 8.9.2015 581358 Ohjelmistoarkkitehtuurit 34 Beautiful architectures do more with less 8.9.2015 581358 Ohjelmistoarkkitehtuurit 35 6