2007-01-25

Arv och Workflows

Workflows ärver från SequentialWorkflowActivity (för sekventiella flöden) och en dag slog mig tanken att skapa en basklass för detta i mitt projekt.

Varför använda arv?

  • Kapsla återkommande kod, tex för att registrera nya instanser, fel, avslut
  • Förenkla för andra utvecklare i projektet
  • Ett ställe att underhålla denna generella kod
  • Basklassen skulle kunna ligga i ett eget assembly

Vad händer när vi skapar ett arv från SequentialWorkflowActivity? Svaret är GÖR DET INTE!, designern hanterar det inte och om man löser det problemet (efter många timmar) så snurrar inte flödet ändå eftersom runtimen inte hanterar det.

Lösningen är att använda exempelvis decorator pattern men jag valde en variant (Eftersom mina flöden lever i MOSS och jag inte har full kontroll över dem)

Först skapade jag ett interface IWorkflowHelperEnabled som ger mig tillgång till själva flödet och dess aktiviteter. Sedan skapade jag en klass som heter WorkflowHelper som tar en instans av IWorkflowHelperEnabled och registrerar de event och övrigt som jag vill hantera.

Dvs mina flöden implementerar IWorkflowHelperEnabled och skapar en instans av WorkflowHelper med sig själv som parameter (WorkflowHelper tar ett IWorkflowHelperEnabled objekt som parameter i konstruktorn).

Ibland saknar jag verkligen multipla arv..

Inga kommentarer: