fredag, februari 10, 2006

Processdriven utveckling I - Problemet

9 av 10 applikationer som jag varit med att utveckla har handlat om att hantera information i någon form. Varje gång så bygger jag en datamodell, GUI och ett objektlager om man orkar. Oavsett om man väljer att designa objekt- eller datamodellen först så står man inför det faktum att informationen ska definieras och modelleras.

Information generellt sätt ändrar sitt tillstånd med tiden. Det kan gälla en faktura, en inköpsorder, ett ärende eller ett betalningsuppdrag. Normalt sett tillför man därför ett antal statuskolumner i sina tabeller/objekt för att lagra tillståndet. En faktura definierar tillstånd som bl a beskriver om den skickats till kund, blivit krediterad, förfallit, skickats som påminnelse, blivit betalad eller delvis betalad. Tillstånd förändras med tiden och beror på händelser som inträffar inom och utanför applikationen.

Händelser kan implementeras på olika platser i applikationen. En faktura som förfaller kan implementeras i databasen som en trigger. En faktura som krediteras ändrar sitt tillstånd från ett formulär i GUI. En faktura som betalats ändrar sitt tillstånd på uppdrag från en Web Service. Man kan säga att händelser inträffar i många olika delar av applikationsarkitekturen som i sin tur påverkar tillståndet hos informationen.

Varje händelse inträffar då ett villkor uppfylls, en s k affärsregel. Affärsregler avgör om en faktura har förfallit eller om den betalats eller delbetalats. Villkor består av uttryck som sätts samman av operatorer och operander. Operanderna är information om fakturan och nyckeltal som styr över gränsvärden.

I vilken ordning som tillstånden förändras håller man däremot relativt öppet för tolkning. Ordningen kan oftast ändras från fall till fall och man låter det bero eftersom det känns stelt att definiera en process som passar alla scenarios. Bygger man applikationen på det här öppna sättet är det relativt enkelt att ändra tillståndet i valfri ordning istället för att hålla sig till en strikt hantering. Det är mycket vanligt att man har en öppenhet till att kunna ändra tillståndet för information med tiden, men varför är det så och vad är alternativen?

Inga kommentarer: