Arkitekturmønster

Et **arkitekturmønster** er en generell og gjenbrukbar løsning på et vanlig problem i programvarearkitektur innenfor en gitt kontekst. Arkitekturmønstre kan brukes for å løse ulike problemer i programvareutvikling som for eksempel ytelsesbegrensninger på maskinvare, høy tilgjengelighet og minimering av forretningsrisiko. Noen arkitekturmønstre har blitt implementert innenfor programvarerammeverk.

## Historie og etymylogi
Bruken av ordet "mønster" i programvareindustrien ble påvirket av lignende begreper brukt i tradisjonell bygningsarkitektur, eksempel Christopher Alexander sin bok *A Pattern Language* (1977) som drøftet å etablere en mønsterleksikon, som skal ha inspirert informatikkutøvere til å tenke utforme sitt eget designleksikon.

Bruk av denne metaforen innenfor programvareutvikling ble vanlig etter utgivelsen av *Design Patterns* (1994) av Erich Gamma, Richard Helm, Ralph Johnson og Johannes Vlissides som kom i samme tidsrom som starten av det offentlige internettet, hvilket gav et utbrudd av komplekse programvaresystemer med tilsvarende behov for å kodifisere den raskt viltvoksende verden av programvareutvikling på laveste mulige nivå, men samtidig være fleksibel og adaptiv.

Arkitekturmønstre ligner på programvare-designmønstre, men har et bredere omfang.

## Definisjon
Selv om et arkitekturmønster formidler et bilde av et system, er det ikke en arkitektur. Et arkitekturmønster er et konsept som løser og avgrenser noen viktige sammenhengende elementer i en programvarearkitektur. Utallige forskjellige arkitekturer kan implementeres etter det samme mønsteret og dele de relaterte egenskapene. Et mønster er ofte definert som strengt beskrevet og allment tilgjengelig.

## Arkitekturstil
Lignende som for arkitekturstiler i tradisjonell bygningsarkitektur er arkitekturstilen til en programvare en spesifikk konstruksjonsmetode karakterisert av egenskaper som gjør dem bemerkelsesverdige.

En arkitekturstil definerer en familie av systemer med et mønster av strukturell organisering, altså et vokabular av komponenter og koblinger med begrensninger på hvordan de kan kombineres.
En arkitekturstil er en navngitt samling av arkitektur-designvalg som (1) er anvendelige i en gitt utviklingskontekst, (2) begrenser arkitektoniske designbeslutninger som er spesifikke for et bestemt system innenfor den konteksten og (3) gir fordelaktige kvaliteter i hvert resulterende system.
Noen forfattere behandler arkitekturmønstre og arkitekturstiler som samme ting, mens noen behandler spesialiseringer av mønstre som stiler. Begge tilfellene har til felles at både mønstre og stiler er idiomer brukt av arkitekter, og at de legger til rette for et "felles språk" eller "ordforråd" for å beskrive klasser av systemer.

Hovedforskjellen er at et mønster kan ses som en løsning på et problem, mens en stil er mer generell og ikke krever et problem som må løses for å studeres.

## Eksempler
Under er en liste over arkitekturmønstre og tilsvarende programvare-designmønstre og løsningsmønstre.

Flere eksempler på arkitekturmønstre er:

* Mikrotjenester
* Modell-view-controller
* Objektorientert programmering
* Operasjonelt datalager
* Peer-to-peer
* Tjenesteorientert arkitektur
* Distribuert hashtabell

## Se også
* Virksomhetsarkitektur

## Referanser