onsdag, maj 23, 2007

Separation of Concerns

Deltog i en diskussion om vad man med skiktade arkitekturer kan åstadkomma för att skapa föränderlighet i systemen vi bygger.

Förändringar i systemen sker alltid på sikt, men frågan är vilka förändringar. Antag två typer av förändringar, funktionella och tekniska:

Funktionella förändringar
  • Regler - att kunna göra tillägg och förändringar av villkor i systemet som representerar affärsregler
  • Processer - att ändra sekvensen av aktiviteter i en affärsprocess
  • Information - att göra tillägg av nya informationsfält i den existerande datastrukturen
  • Resurser - att i systemet ändra från att använda en viss resurs/tjänst till att använda en helt annan
  • Händelser - att i systemet kunna hantera händelser som inte var påtänkta från början
Tekniska förändringar
  • Applikationsserver - ex. ändra från IIS till Apache/Tomcat
  • Databasserver - ex. ändra databasserver från SQL Server till MySQL
  • Protokoll - ex. ändra kommunikationsprotokoll mellan logiska enheter i systemet
  • Plattform - ex. flytta applikationen från Windows till Linux
  • Hårdvara - ex. göra en tech-refresh av hårdvaran
  • Säkerhet - ex. man vill göra applikationen åtkomlig över internet
  • Dimensionering - ex. lyfta applikationen från 100 användare till 10000 användare
  • Integration - ex. att man vill exponera funktioner och dataåtkomst via API:er
  • Utökning - ex. bygga in nytt klientstöd för PDA:er och mobiltelefoner
Jag menar att lager inte tillför något för funktionella förändringar i systemet. Då krävs det istället att man skapar egna logiska enheter för regler (Business Rules Management), processer (Business Process Management), information (Master Data Management), tjänster (Service Oriented Architecture) respektive för händelser (Event Driven Architecture). På det viset åstadkommer man SoC (Separation of Concerns) som skapar förutsättningar för systemet att växa med uppgiften.

Den skiktade arkitekturen kan inte alls svara upp mot funktionella förändringar, utan passar bättre för de tekniska kraven. Att kunna skapa nya lager eller att ersätta lager ger fördelar då man vill byta ut och lägga till teknik. Dimensionering kan hanteras genom att man skalar ut/upp runtime-miljön för ett lager. Hårdvaruvirtualisering bygger på skiktning i arkitekturen.

Framför allt tror jag att skiktade arkitekturer är populära för att man kan skapa 'Separation of Skills', dvs att vissa roller i exempelvis ett webutvecklingsprojekt kan jobba inom olika areas of interest, som man säger.

Visst kommer de tekniska förändringarna att kvarstå, men det är inget man tappar bara för att man inte bygger en traditionell skiktad arkitektur. Tvärtom så kommer SoC-design passa bättre även för de tekniska kraven.

Ser man till hur en skiktad design med lager på lager skulle hantera funktionella förändring så kan komplexiteten i relation till förändringstakten kunna se ut så här:


Tryggast är väl att det mest komplexa att ändra dvs processer kanske inte ändrar sig så ofta. Men det kan ju bero på att IT sitter och bromsar affärsutvecklingen med system som är byggda med skiktade arkitekturer.

Skapar man däremot en design där man skiljer de funktionella förändringarna åt logiskt så skulle det se annorlunda ut:


Inga kommentarer: