Monday, June 26, 2006 12:07 PM
by
renel
Contract First uddybning
Så er mit seneste screencast kommet online – denne gang om hvordan man kommer fra xml schema til WSDL ved hjælp af Infostrukturbasens WSDL værktøj.
I sidste uge havde vi her hos Microsoft besøg af en student partner fra Aalborg – Kristian – som var så uforskammet ;-) at sige at jeg forsømte at fortælle hvorfor ”Contract First” er vigtigt. Altså vigtig nok til at lave en hel webcast serie omkring.
Damnit hvor jeg hader at få kritik – specielt hvis den er berettiget!
Hvad er ”Contract First”?
I min optik er CF mere et koncept end det er metode og teknologi. For at CF skal blive praktisk anvendeligt er det naturligt at man forsøger at finde metoder og teknologi til implementering af konceptet.
CF er ikke noget nyt begreb lavet specielt til en serviceorienteret IT verden – jeg har stødt på begrebet i mødet med Component Based Development (CBD - hvor specificering og efterfølgende implementering af et interface i min optik også er CF) og man kan garanteret finde en historik, som går længere tilbage.
Min udlægning af kontraktdelen af CF, i en service orienteret verden er følgende abstraktion:
Aftaler omkring de ”sovs og kartofler”-elementer som indgår i de beskeder, der sendes mellem to IT systemer: Strukturdefinitioner, datatypedefinitioner og eventuelt tilstand (hvilket er lidt noget fy! Men som mange vil hævde er uundgåligt) – herunder også aftaler for hvad man gør hvis noget går galt
Aftaler omkring hvordan beskederne sendes eller transporteres og hvor de sendes til
Aftaler om hvordan man sikre pålidelighed, integritet, uafviselighed og fortrolighed
I princippet kan systemejerne formulere dette i alment prosa i tekst dokumenter (kontrakten) og give det til deres respektive systemudviklere og forvente at systemerne kan kommunikere baseret på det skrevne i kontrakten.
Så ”Contract First” er basalt set at lave en systemintegration udfra en prædefineret ”kontrakt”. Hvordan kontrakten er formuleret er i princippet underordnet, ”bare” de involverede parter er enige om en fælles sematik – har fælles forståelse om fortolkningen og udmøntning af kontrakten.
Når kontrakten skal implementeres i IT bliver det et forretningskritisk punkt at kontraktens ordlyd kan efterkommes uden store tvivlsspørgsmål og andre fortolkningsissues. Derfor er det en vigtig del af hele ”Contract First” scenariet at kontrakten kan udtrykkes så explicit så muligt og meget gerne så nagelfast og letforståelig at et IT system kan fortolke kontrakten uden menneskelig indblanding.
For at imødekomme noget sådan bliver store dele af kontrakten typisk udtryk i maskinlæsbare Xml-vokabularier, som f.eks. Xml Schema, WSDL, SOAP, WS-Security etc.
Beat – en af mine europæiske kollegaer - mener at hvis man starter med et Xml schema i kontrakt modelleringen – så laver man ”Schema First” udvikling – en metode til implementering af CF. Jeg syntes det lyder, som en meget fornuftig udlægning fordi man dermed får gjort CF teknolgi- og standardsneutral.
Her følger to simple eksempel på CF i to forskellige pardigmer:
CBD: Business Concept Model (UML) -> Business Type Model (UML) -> … -> Object Constraint Language specificering -> Interface specification -> Interface implementering
SO: Business Concept Model (UML) -> Business Type Model (UML) -> …. -> Datatyper og beskedsstrukturer i XML Schema -> WSDL og Policy dokument generering -> Webservice implementering
Her kan den sidste siges at være det Beat refererer til som “Schema First”, men for nu (og resten af denne post) er ”Schema, WDSL, Policy .... first” det samme som ”Contract First”.
Yderligere info om CF og SO modelling kan fåes ved at læse denne artikel og part 2 (når den kommer online), som giver et rigtigt godt overblik og indgang til at lave webservices CF.
Hvorfor er ”Contract First” vigtig?
Den typiske metode til generering af kontrakt dokumenter som f.eks Xml schemaer og WSDL’er er ved hjælp at IDE/RAD værktøjer. Systemudvikleren koder systemet ud fra en forventning om at IDE/RAD værktøjet vil generere kontrakt dokumenterne automatisk ud fra de kriterier udviklerne opstiller. For det meste sker det dog udviklerne overraskes af de genererede kontraktdokumenter – et er hvad udviklerne forventede ville komme ud af værktøjet – et andet er hvad der rent fakstisk kommer ud.
Ved kommunikation mellem to systemer, hver især kontrolleret af to forskellige parter (forskellige programmeringssprog, platforme, verdensdele etc.) vil der opstå problemer når de to IDE/RAD genererede kontrakt dokumenter sammenlignes og interoperabilitet kan og vil ikke finde sted.
Derfor giver det meget god mening at lade de to systemkontrollerende parter blive enige om en fælles kontrakt (meget gerne en maskinlæsbar xmlbaseret kontrakt) inden system integration mellem de to systemer kodes.
CF giver det bedste fundament for interoperable systemer og fejl og debugging bliver en anelse nemmere at pin-pointe. Derfor er Contract First vigtig!
Har Microsoft support for ”Contract First” til Webservices?
Microsoft har ikke dedikeret support for CF – faktisk kender jeg ikke til IDE/RAD værktøjer – i eller uden for Microsoft , som har CF support til udvikling – jeg vil gerne peges i retning af noget hvis andre kender til et produkt. Men det betyder ikke at CF for webservices ikke kan laves gennem f.eks Visual Studio se denne webcast, som omhandler CF med et gratis plug-in til Visual Studio.
Er CF det eneste man skal bekymre sig om i en webservice ”life cycle”?
Nope, men mere om det senere – CF er et rigtig godt udgangspunkt.