<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alt om ingenting og litt i mellom &#187; design</title>
	<atom:link href="http://hovenko.no/blog/tag/design/feed/" rel="self" type="application/rss+xml" />
	<link>https://hovenko.no/blog</link>
	<description>En blogg av Knut-Olav</description>
	<lastBuildDate>Mon, 10 Mar 2025 19:25:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Programkode og modulbasert arkitektur</title>
		<link>https://hovenko.no/blog/2011/03/01/programkode-og-modulbasert-arkitektur/</link>
		<comments>https://hovenko.no/blog/2011/03/01/programkode-og-modulbasert-arkitektur/#comments</comments>
		<pubDate>Tue, 01 Mar 2011 19:32:23 +0000</pubDate>
		<dc:creator>Knut-Olav</dc:creator>
				<category><![CDATA[Arkitektur]]></category>
		<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[arkitektur]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[modularitet]]></category>
		<category><![CDATA[prosjektstyring]]></category>

		<guid isPermaLink="false">http://hovenko.no/blog/?p=586</guid>
		<description><![CDATA[Med modulbasert arkitektur gjelder det å dele opp systemet som skal lages i moduler av håndterbar mengde kode og funksjonalitet, hvor hver modul er ekspert på sitt ansvarsområde og eksponeres til resten av systemet igjennom veldefinerte grensesnitt. Utenfra fungerer en modul som en sort boks; man gir beskjeder inn og man får svar tilbake. Man [...]]]></description>
			<content:encoded><![CDATA[<p>Med modulbasert arkitektur gjelder det å dele opp systemet som skal lages i moduler av håndterbar mengde kode og funksjonalitet, hvor hver modul er ekspert på sitt ansvarsområde og eksponeres til resten av systemet igjennom veldefinerte grensesnitt.</p>
<div class="wp-caption alignnone"><a href="http://www.flickr.com/photos/create_joy/4291306755/"><img alt="" src="http://farm5.static.flickr.com/4013/4291306755_dd271b1021.jpg" title="Puslespill (Puzzle). Foto: Flickr/create_joy (CC)" width="500" height="357" /></a><p class="wp-caption-text">Puslespill (Puzzle). Foto: Flickr/create_joy (CC)</p></div>
<p>Utenfra fungerer en modul som en sort boks; man gir beskjeder inn og man får svar tilbake. Man vet ikke hvordan den sorte boksen kommer frem til svaret. Det gjør det enklere å forholde seg til støttefunksjoner, så man kan fokusere på den funksjonaliteten man skal lage. Jeg kaller det støttefunksjoner fordi disse funksjonene ikke er viktige; eller rettere sagt så er funksjonaliteten man arbeider med for øyeblikket mye viktigere enn en hvilken som helst annen annen modul.</p>
<h3>Vedlikeholdbarhet</h3>
<p>Behovet for modulbasert arkitektur oppstår når systemer blir for store til at én eller to personer kan ha oversikt over hele systemet. Da blir det viktig med vedlikeholdbare moduler av håndterbare mengder med kode.</p>
<p>Vedlikeholdbarhet betyr ikke at koden til stadighet må endres, noe som faktisk fungerer mot sin hensikt. Dersom modulen endres for ofte med for store endringer kan det innføre feil. Mye ny funksjonalitet kan gjøre modulen uoversiktlig og mindre vedlikeholdbar. En vedlikeholdbar modul bidrar til at resten av systemet får en tydelig måte å kommunisere med modulen på, og dersom man støter på feil så skal man klare å fikse feilen.</p>
<h3>Eksempel på modulbasert løsning</h3>
<div id="attachment_601" class="wp-caption aligncenter"><a href="http://hovenko.no/blog/wp-content/uploads/2011/02/modulbasert-arkitektur.png"><img src="http://hovenko.no/blog/wp-content/uploads/2011/02/modulbasert-arkitektur-500x288.png" alt="" title="Modulbasert Arkitektur - eksempel" width="500" height="288" class="size-medium wp-image-601" /></a><p class="wp-caption-text">Et svært enkelt og overordnet eksempel på en modulbasert nettbutikkløsning</p></div>
<p>Kjernen av <em>MyWebShop</em> kommuniserer mot eksterne komponenter over definerte grensesnitt. Det er ikke sikkert at alle komponenter har grensesnitt basert på åpne standarder, som SQL, SMTP og HTTP. Det kan være behov for å definere nye grensesnitt i bedriften. For eksempel kan kommunikasjon mot et CMS-system skje via et nytt grensesnitt vi kaller <em>ProductService</em> som tilbyr funksjoner som er nyttige for vår nettbutikk. På denne måten definerer vi tydelig hvilke funksjoner nettbutikken har behov for, samtidig som vi skjuler andre funksjoner som CMS-systemet tilbyr som ikke er viktige for vårt system.</p>
<p>Når kommunikasjon mellom moduler foregår over definerte grensesnitt, så kan moduler byttes ut med ny moduler ved behov. For eksempel kan modulen <em>My Simple CMS</em> byttes ut med et mer avansert og bedre CMS-system dersom nettbutikken vår blir større og får nye behov som den gamle modulen ikke kan tilby. Om den nye modulen ikke støtter det samme grensesnittet som den gamle kan man lage et veldig lite oversettingslag, kalt for et adapter, som oversetter mellom vårt eget <em>ProductService</em>-grensesnitt og den nye modulen.</p>
<h3>Samhandling</h3>
<p>Et ofte brukt tilfelle av modulbasert programvare er når data skal behandles i flere ledd. Samme grensesnitt kan brukes i front av flere forskjellige moduler. For eksempel kan et spamfilter kobles på foran e-posttjeneren slik at e-post kan filtreres før det lagres i brukerens innboks, og uønsket e-post kastes uten at brukeren ser e-posten. Fordelen med modulbasert arkitektur er klar, man får et mer oversiktlig system med komponenter som kan settes sammen og byttes ut ved behov.</p>
]]></content:encoded>
			<wfw:commentRss>https://hovenko.no/blog/2011/03/01/programkode-og-modulbasert-arkitektur/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funksjonell og logisk arkitektur i IT-prosjekter</title>
		<link>https://hovenko.no/blog/2011/02/07/funksjonell-og-logisk-arkitektur-i-it-prosjekter/</link>
		<comments>https://hovenko.no/blog/2011/02/07/funksjonell-og-logisk-arkitektur-i-it-prosjekter/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 11:56:37 +0000</pubDate>
		<dc:creator>Knut-Olav</dc:creator>
				<category><![CDATA[Arkitektur]]></category>
		<category><![CDATA[Teknologi]]></category>
		<category><![CDATA[arkitektur]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[logisk]]></category>
		<category><![CDATA[prosjektstyring]]></category>

		<guid isPermaLink="false">http://hovenko.no/blog/?p=550</guid>
		<description><![CDATA[Som jeg skrev i introduksjonenen til IT-arkitektur så finnes det flere innsynsvinkler til dette temaet. Hva er så mer logisk enn å starte med logisk arkitektur? Det handler om funksjonaliteten, det viktigste i et IT-system og den viktigste årsaken til at IT-prosjekter settes i gang! Et IT-system skal løse et behov for virksomheten, eller kunden [...]]]></description>
			<content:encoded><![CDATA[<p>Som jeg skrev i <a href="http://hovenko.no/blog/2011/01/27/hvorfor-begynner-man-med-arkitektur/">introduksjonenen til IT-arkitektur så finnes det flere innsynsvinkler</a> til dette temaet. Hva er så mer logisk enn å starte med logisk arkitektur? Det handler om funksjonaliteten, det viktigste i et IT-system og den viktigste årsaken til at IT-prosjekter settes i gang!</p>
<p>Et IT-system skal løse et behov for virksomheten, eller kunden som vi kaller det. Kunden har mange behov, men man avgrenser gjerne systemet til å løse et subsett av disse behovene. Vi kaller dette for <a href="http://en.wikipedia.org/wiki/Problem_domain">problemdomenet</a>.</p>
<p>Målet med logisk arkitektur er å styrke de funksjonelle kravene, og veien til en god logisk arkitektur kan være lang. Kunden vet ikke hva det egentlige behovet er, og har ofte sin en oppfatning om hvordan løsningen skal se ut. Utviklere blir ofte veldig engasjerte og starter å lage noe de selv synes virker kult istedenfor å grave og analysere i kundens egentlige problemer.</p>
<div class="wp-caption alignnone"><a href="http://en.wikipedia.org/wiki/Gnomes_(South_Park)"><img alt="" src="http://upload.wikimedia.org/wikipedia/en/d/dd/Gnomes_plan.png" title="South Park Gnomes plan" width="442" height="334" /></a><p class="wp-caption-text">South Park Gnomes plan</p></div>
<h3>Verktøy</h3>
<p>Det finnes flere verktøy for å analysere seg fram til en god logisk arkitektur. For å definere de funksjonelle kravene kan man skrive brukstilfeller (<em>use cases</em> på engelsk) som definerer hvilke brukere eller roller som skal utføre hvilke steg i en prosess for å ende opp med et ønsket resultat. Dette avdekker alternative valg som brukeren kan gjøre, for eksempel hva som skjer hvis brukeren taster en ugyldig verdi inn til systemet eller avbryter midt i prosessen. Dette dokumentet brukes for å måle om funksjonaliteten som ble avtalt er implementert og fungerer. Dette skaper en målbarhet som er viktig for at både kunde og leverandør (prosjektgruppen) skal ha felles forståelse for hva som lages og hva som er levert.</p>
<p>Det finnes også verktøy for å visualisere systemer, og <a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language">UML er en notasjon for å visualisere systemer</a>. Det kan visualisere brukstilfeller, flyt av data og koblinger mellom komponenter, valgmuligheter underveis i prosesser og tilstand til komponenter under gitte kriterier. Det finnes flere aspekter man kan visualiere med UML, men de nevnte er hovedsaklig de viktigste innenfor logisk arkitektur. Det handler om å modellere domenet, og komponentene navngis ofte etter begreper som brukes i virksomheten. </p>
<h3>Domenedrevet design</h3>
<p>En teknikk som jeg har fått sansen for er <a href="http://domaindrivendesign.org/">domenedrevet design (DDD)</a>, hvor fokuset rettes mot problemdomenet og det viktigste er å ha en god og dyp domenemodell på et felles språk. Dyp i at den reflekterer virksomhetens problemområde best mulig og med felles språk på tvers av programkode og de daglige funksjoner i virksomheten.</p>
<p>For å skape et felles språk som alle i prosjektet kjenner til og forstår betydningen av, så bør man lage en ordbok som alle gjør seg kjent med. Alle begreper fra domenemodellen bør legges inn i en slik ordbok. Ordboken skal være fri for systemtekniske begreper og skal forstås av domeneekspertene; de som kjenner virksomhetens funksjoner best.</p>
<h3>Eksempel på domenemodell</h3>
<p>Nedenfor vises et eksempel på en domenemodell av et bloggsystem. Det anbefales å skrive en kort tekst til figurene, da det ikke alltid er lett å forstå meningen bak en tegning. Dette er bare én av mange måter å visualisere et problem på.</p>
<div id="attachment_563" class="wp-caption alignright"><a href="http://hovenko.no/blog/wp-content/uploads/2011/02/domainmodel.png"><img src="http://hovenko.no/blog/wp-content/uploads/2011/02/domainmodel-500x322.png" alt="" title="Eksempel på domenemodell for en blogg" width="500" height="322" class="size-medium wp-image-563" /></a><p class="wp-caption-text">Eksempel på domenemodell for en blogg</p></div>
<p>Når man får dypere forståelse av domenet lager man en ny tegning som enten erstatter en gammel tegning eller som kan supplere en eksisterende tegning. Dersom kunden fra eksempelet over også ønsker at leserne skal kunne abonnere på en strøm av blogginnlegg, så kan man lage en ny tegning som viser et søk som mates inn i en nyhetsstrømgenerator (i mangel av bedre ord).</p>
<p>Det finnes ingen fasit på logisk arkitektur. Alle konkurransedrevne virksomheter har særegne behov, noe de trenger for å kunne konkurrere og skille seg ut i markedet. Nettopp derfor er logisk arkitektur trolig det vanskeligste å forstå og gjennomføre innenfor IT-arkitektur.</p>
<p>Lykke til med neste prosjekt! Etter å ha lest dette setter du deg selvfølgelig dypere inn i kundens virksomhet og avgrenser systemets oppgaver til å løse kundens konkrete problem – ikke sant?</p>
]]></content:encoded>
			<wfw:commentRss>https://hovenko.no/blog/2011/02/07/funksjonell-og-logisk-arkitektur-i-it-prosjekter/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
